キャプチャされた変数でこの奇妙な動作に遭遇しました。以下は 2 つのループです。どちらも同じように振る舞うと思います。なぜ動作が異なるのですか?
private static void Loop1()
{
var actions = new List<Action>();
foreach (var number in Enumerable.Range(1, 5))
{
actions.Add(()=>Console.WriteLine(number));
}
foreach (var currentAction in actions)
{
currentAction();
}
}
private static void Loop2()
{
var actions = new List<Action>();
for (int number = 0; number <= 4; number++)
{
actions.Add(() => Console.WriteLine(number));
}
foreach (var currentAction in actions)
{
currentAction();
}
}
最初のループは 1,2,3,4,5 を出力します 2 番目のループは 5,5,5,5,5 を出力します