ホームページ > バックエンド開発 > C++ > C#ループアクションが同じ変数をキャプチャするのはなぜですか?これを避けることができますか?

C#ループアクションが同じ変数をキャプチャするのはなぜですか?これを避けることができますか?

Mary-Kate Olsen
リリース: 2025-02-03 07:44:16
オリジナル
580 人が閲覧しました

Why Do C# Loop Actions Capture the Same Variable, and How Can This Be Avoided?

サイクルキャプチャの変数

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

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