大家好,我正在尝试写匿名委托。由于整数变量在代表之间共享,我需要它成为每个代表的本地实例,这样
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]);
}));
}
每次迭代使用本地获取不同的值
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 博客条目,其中包含详细的技术解释:Closing over the loop variable considered harmful