我剛碰到最出人意料的行爲。我確信這樣做有一個很好的理由。有人可以幫忙解釋一下嗎?C#中的lambda如何在foreach中與枚舉器綁定?
考慮以下代碼:
var nums = new int[] { 1, 2, 3, 4 };
var actions = new List<Func<int>>();
foreach (var num in nums)
{
actions.Add(() => num);
}
foreach (var num in nums)
{
var x = num;
actions.Add(() => x);
}
foreach (var action in actions)
{
Debug.Write(action() + " ");
}
輸出是對我來說有點出人意料:
4 4 4 4 1 2 3 4
顯然有什麼東西與拉姆達是如何引用枚舉回事。在foreach的第一個版本中,'num'實際上是綁定到'Current',而不是它返回的結果?
你似乎已經自己想通了。 :) – ChaosPandion 2010-03-10 00:37:53
我推斷了行爲,但不是機制。我希望能得到像Greg D's這樣的解釋膽量的答案。 – scobi 2010-03-10 00:51:46