循环中的匿名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博客条目,其中包含详细的技术说明: 关闭循环变量被视为有害
- C# – 如何在列表中添加所有system.drwaing.color项?
- 无法获得Mono 2.10的Microsoft.VisualBasic.dll
- 无法连接到任何指定的mysql主机。 C#MySQL
- 如何为我的程序设置任务管理器说明?
- 在asp.net中使用SQL Server存储过程输出c#
- 如何从Azure webjob与Azure webapp进行通信?
- 无法打开exceptionDATABASE1.MDF’,因为它是版本655.此服务器支持版本612及更早版本。 不支持降级路径
- Excel Interop的Worksheet.UsedRange.Rows在Spreadsheet Light中的模拟是什么?
- C#中集合数据类型的比较