Anonymous c# delegate within a loop

前端 未结 3 819
无人共我
无人共我 2020-12-11 15:24

Hi all i am trying to write and anonymous delegate. as the integer variable is shared among the delegate i need it to be the local instance of every delegate such that rs[0]

相关标签:
3条回答
  • 2020-12-11 15:52

    Make a local copy of i:

       for (int i = 0; i < nics.Count; i++)
       {
             int j = i;
             rs[i] = new RollingSeries(monitor, new RollingSeries.NextValueDelegate(delegate()
             {
                return GetNetworkUtilization(nics[j]);
              }));
        }
    

    The Beauty of Closures

    0 讨论(0)
  • 2020-12-11 15:54

    Put int j = i inside your loop and refer to j within the lambda expression.

    If you are curious about why this happens, here is an MSDN blog entry containing a detailed technical explanation: Closing over the loop variable considered harmful

    0 讨论(0)
  • Use a local to get a different value per iteration

    for (int i = 0; i < nics.Count; i++)
       {
             int localI = i;
             rs[i] = new RollingSeries(monitor, new RollingSeries.NextValueDelegate(delegate()
             {
                return GetNetworkUtilization(nics[localI]);
              }));
        }
    
    0 讨论(0)
提交回复
热议问题