首頁 >後端開發 >C++ >C#foreach循環變量重複使用會導致'訪問修改後的關閉”問題?

C#foreach循環變量重複使用會導致'訪問修改後的關閉”問題?

Linda Hamilton
Linda Hamilton原創
2025-01-31 21:16:10580瀏覽

Why Does C# Foreach Loop Variable Reuse Cause

c#foreach循環變量重複使用:問題和解決方案

>

> c#lambda表達式和匿名方法在foreach>循環中引入了“修改後的閉合”問題。 考慮此示例:

<code class="language-csharp">foreach (var s in strings)
{
   query = query.Where(i => i.Prop == s); // Modified closure issue
   ...
}</code>

編譯器的生成代碼揭示了問題的根源:

>
<code class="language-csharp">string s;
while (enumerator.MoveNext())
{
   s = enumerator.Current;
   ...
}</code>

s變量被聲明外部

循環。這種設計雖然最初看似無害,但卻造成了問題。它沒有提供性能優勢,並限制了循環以外的可變用法。

>為什麼?

> for這個變量重複使用是早期C#(1.0)中的設計選擇。 內部變量和外部變量之間的差異被認為微不足道。但是,C#2.0的封閉語義改變了這一點。 與

循環保持一致性,將循環變量放置在外部。

在C#5和更高版本中的更改 >識別缺陷,C#5引入了一個破壞的變化:

循環變量現在是邏輯上的

>內部的foreach>。 每次迭代都會收到一個新副本。 這解決了“修改後的閉合”問題,使較舊的方法不安全。 它還突出了仔細的

關鍵字用法的重要性,尤其是使用lambdas或nonymous方法。

以上是C#foreach循環變量重複使用會導致'訪問修改後的關閉”問題?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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