ホームページ > バックエンド開発 > C++ > C# 5.0 のキャプチャされたクロージャの修正が For ループに適用されないのはなぜですか?

C# 5.0 のキャプチャされたクロージャの修正が For ループに適用されないのはなぜですか?

Patricia Arquette
リリース: 2025-01-07 19:16:43
オリジナル
315 人が閲覧しました

Why Doesn't C# 5.0's Captured Closure Fix Apply to For Loops?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート