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