首頁 >後端開發 >C++ >為什麼 C# 5.0 的捕捉閉包修復不適用於 For 迴圈?

為什麼 C# 5.0 的捕捉閉包修復不適用於 For 迴圈?

Patricia Arquette
Patricia Arquette原創
2025-01-07 19:16:43329瀏覽

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 迴圈中的初始化器只執行一次,因此只進行一次「變數實例化」是合乎邏輯的。此外,對於每次循環迭代,並沒有關於變數「初始」值的固有假設。

考慮以下範例:

<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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn