我不能很好地理解兩個代碼塊之間的區別。考慮有一個程序C#關閉沒有按預期工作
class Program
{
static void Main(string[] args)
{
List<Number> numbers = new List<Number>
{
new Number(1),
new Number(2),
new Number(3)
};
List<Action> actions = new List<Action>();
foreach (Number numb in numbers)
{
actions.Add(() => WriteNumber(numb));
}
Number number = null;
IEnumerator<Number> enumerator = numbers.GetEnumerator();
while (enumerator.MoveNext())
{
number = enumerator.Current;
actions.Add(() => WriteNumber(number));
}
foreach (Action action in actions)
{
action();
}
Console.ReadKey();
}
public static void WriteNumber(Number num)
{
Console.WriteLine(num.Value);
}
public class Number
{
public int Value;
public Number(int i)
{
this.Value = i;
}
}
}
輸出是
1
2
3
3
3
3
的代碼,這兩個塊應相同方式工作。但是你可以看到閉合不適用於第一個循環。我錯過了什麼?
在此先感謝。
這是破碎的'foreach'關閉問題嗎? (http://stackoverflow.com/questions/512166/c-sharp-the-foreach-identifier-and-closures) – sircodesalot
@sircodesalot:相反的排序 - 這是'foreach'由於C#5修復了這個問題。 –
哦,他們修好了。很高興知道,謝謝! – sircodesalot