我正在使用Func <>委託添加整數範圍(101,105)。我假設在執行以下操作時獲得101,102,.. 105作爲輸出。但是我得到204,204,..... 什麼出錯?C#Func委託
class MainClass
{
static List<Func<int>> somevalues = new List<Func<int>>();
static void Main()
{
foreach (int r in Enumerable.Range(100, 105))
{
somevalues.Add(() => r);
}
ProcessList(somevalues);
Console.ReadKey(true);
}
static void ProcessList(List<Func<int>> someValues)
{
foreach (Func<int> function in someValues)
{
Console.WriteLine(function());
}
}
}
請參閱http://blogs.msdn.com/ericlippert/archive/2009/11/12/closing-over-the-loop-variable-considered-harmful.aspx – 2009-11-30 18:46:55
此外,這是一個確切的http: //stackoverflow.com/questions/295593/linq-query-built-in-foreach-loop-always-takes-parameter-value-from-last-iteration – 2009-11-30 18:51:15