我不知道是否有简单的方法来强制匿名函数的参数评估?对于多线程编程,这是重要的匿名函数的力参数评估
。 例如,当我写
for(int i=0; i<5; ++i)
{
Task.Factory.StartNew(() => Console.WriteLine(i));
}
大多数人会得到“5”五次。事实上代码剪断更可能预期输出中0到5
一个快速的解决方案如下:
for(int i=0; i<5; ++i)
{
var local = i;
Task.Factory.StartNew(() => Console.WriteLine(local));
}
我觉得生命是更好,如果下面的方法存在以评估匿名函数和返回的所有参数一个逻辑与原点相同:
Action EvaluateParameters(Action action)
任何想法?
谢谢。
他们将如何获得5次,5次? – 2011-08-24 12:10:22
@CodeMonkey:试试吧,它是真的。 Eric Lippert写的那篇文章:http://blogs.msdn.com/b/ericlippert/archive/2009/11/12/closing-over-the-loop-variable-considered-harmful.aspx – Jens
@Jens:啊有趣。 – 2011-08-24 12:13:45