大家好我想写的和匿名代表。因为整数变量在委托之间共享,我需要它是每个委托的本地实例,这样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]);
}));
}
Abdul khaliq
答案 0 :(得分:22)
制作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]);
}));
}
答案 1 :(得分:6)
使用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]);
}));
}
答案 2 :(得分:4)
将int j = i
放入循环中并引用lambda表达式中的j
。
如果您对发生这种情况的原因感到好奇,请参阅MSDN博客文章,其中包含详细的技术说明:Closing over the loop variable considered harmful