9
C#のループでキャプチャされた変数
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が出力されると思いますが、実際には5つの10が出力されます。 これは、1つのキャプチャされた変数を参照するすべてのアクションが原因であると思われます。その結果、それらが呼び出されると、すべて同じ出力になります。 この制限を回避して、各アクションインスタンスに独自のキャプチャされた変数を持たせる方法はありますか?