C# でラムダ式を定義する場合、ラムダ式が外部変数とどのように相互作用するかを理解することが重要です。デフォルトでは、ラムダ式は外部変数への参照をキャプチャする傾向があります。ただし、場合によっては、これらの変数を強制的にコピーすることが重要です。
次の例を考えてみましょう。これは、ラムダ式とループを使用して一連の数値を出力するように設計されています。
class Program { delegate void Action(); static void Main(string[] args) { List<Action> actions = new List<Action>(); for (int i = 0; i < 10; i++) actions.Add(() => Console.WriteLine(i)); foreach (Action a in actions) a(); } }
ラムダ式で参照ではなく変数のコピーを強制的にキャプチャするには、ループ内で変数のローカル コピーを作成することが回避策の 1 つです。
for (int i = 0; i < 10; i++) { int copy = i; // 创建局部副本 actions.Add(() => Console.WriteLine(copy)); }
この動作を理解することは、C# でラムダ式を使用する場合に重要です。これにより、開発者はラムダ式が共有変数とどのように対話するかを制御でき、プログラムが期待どおりに実行されるようになります。
以上がC# Lambda でのコピーまたは参照のキャプチャ: いつどちらを選択すべきですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。