循环中的匿名c#委托

大家好我想写和匿名代表。 因为整数变量在委托之间共享,我需要它作为每个委托的本地实例,这样rs [0]总是得到nics [0],rs [1]总是得到nics [1]等等…我能做到这一点吗?

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

阿卜杜勒·卡利克

制作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]); })); } 

封闭之美

使用local可以在每次迭代时获得不同的值

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

int j = i放在循环中并在lambda表达式中引用j

如果您对发生这种情况的原因感到好奇,这里有一个MSDN博客条目,其中包含详细的技术说明: 关闭循环变量被视为有害