我想问为什么变量表现得很奇怪?
static void Main(string[] args)
{
int[] numbers = new int[] { 1, 2, 3 };
List<Action> lst_WANT = new List<Action>();
foreach (var currNum in numbers)
{
//--------- STRANGE PART -------------
int holder = currNum;
lst_WANT.Add(() =>
{
Console.WriteLine(holder);
});
}
foreach (var want in lst_WANT)
want();
Console.WriteLine("================================================");
List<Action> lst_DONT_WANT = new List<Action>();
foreach (var currNum in numbers)
{
lst_DONT_WANT.Add(() =>
{
Console.WriteLine(currNum);
});
}
foreach (var dont_want in lst_DONT_WANT)
dont_want();
Console.ReadKey();
}
最终输出是:
1
2
3
-
3
3
3
答案 0 :(得分:3)
所有lambda表达式都共享相同的currNum
变量
循环结束后,该变量为3
。
通过使用在循环内声明的单独变量,您强制每个lambda表达式使用自己不变的变量。