C# に関する興味深い問題に遭遇しました。以下のようなコードがあります。
List<Func<int>> actions = new List<Func<int>>();
int variable = 0;
while (variable < 5)
{
actions.Add(() => variable * 2);
++ variable;
}
foreach (var act in actions)
{
Console.WriteLine(act.Invoke());
}
0、2、4、6、8 を出力するはずですが、実際には 10 が 5 個出力されます。
キャプチャされた 1 つの変数を参照するすべてのアクションが原因のようです。その結果、それらが呼び出されると、すべて同じ出力が得られます。
この制限を回避して、各アクション インスタンスに独自のキャプチャ変数を持たせる方法はありますか?