サイクルキャプチャの変数
C#では、サイクルで操作を定義するときは、変数キャプチャの動作に注意してください。デフォルトでは、すべての操作が同じ変数をキャプチャするため、出力結果は呼び出し時に予想を満たさないようにします。
次の例を考えてください:このコードの予想出力は0、2、4、6、および8です。ただし、実際の出力は5 10です。これは、すべての操作が同じキャプチャされた変数
を引用しているためです。これはサイクルで更新されます。呼び出すと、すべての操作に同じ値10があります。
<code class="language-csharp">List<Action> actions = new List<Action>(); int variable = 0; while (variable < 5) { actions.Add(() => Console.WriteLine(variable * 2)); ++variable; } foreach (var act in actions) { act.Invoke(); }</code>
variable
変数のローカルコピーを通じて、各操作は、予想される出力0、2、4、6、8を取得するために独自の値をキャプチャします。
この変数キャプチャの概念は、C#の閉鎖を理解するために重要です。サイクル内で操作を定義するときは、変数のライフサイクルとそのアクセシビリティを必ず検討してください。
以上がC#ループアクションが同じ変数をキャプチャするのはなぜですか?これを避けることができますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。