C# 5.0 のクロージャ キャプチャ (ループ変数)
質問:
C# 5.0 では、foreach ループでのクロージャのキャプチャに関する問題が解決され、ループ変数の正しい値が確実にキャプチャされるようになりました。ただし、for ループにも同じ問題が依然として存在します。両方のタイプのループでこの問題が解決されないのはなぜですか?
答え:
for ループ内の既存の動作は論理的に適切です。 foreach ループは反復ごとに新しい変数を宣言することに似ていますが、for ループには初期化子、条件、反復子、本体などの固有の構造があります。
for ループ内のイニシャライザは 1 回だけ実行されるため、「変数のインスタンス化」を 1 回だけ行うのは論理的です。さらに、各ループ反復の変数の「初期」値についての固有の仮定はありません。
次の例を考えてみましょう:
<code class="language-C#">for (int i = 0, j = 10; i < 5; i++, j--) { Action action = () => Console.WriteLine(i, j); action(); }</code>
この場合、for ループに対してこの問題を解くと、その動作を決定するのが難しくなります。
以上がC# 5.0 のキャプチャされたクロージャの修正が For ループに適用されないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。