首頁 > 後端開發 > C++ > 是什麼讓 C# 類別可以使用 Foreach 迴圈進行迭代?

是什麼讓 C# 類別可以使用 Foreach 迴圈進行迭代?

Patricia Arquette
發布: 2025-01-10 08:39:43
原創
823 人瀏覽過

What Makes a C# Class Iterable Using a Foreach Loop?

深入理解 C# 中的 foreach 迴圈

C# 中的 foreach 循環是一種強大的語言結構,允許開發人員輕鬆有效地迭代集合中的元素。但是,類別究竟需要滿足哪些條件才能使用 foreach 迴圈呢?

可迭代的類別

任何實作了 IEnumerable 介面的類別都可以使用 foreach 迴圈進行迭代。從技術上講,該類別只需要提供一個傳回具有 MoveNext() 方法和 Current 屬性的物件的 GetEnumerator() 方法,但實作 IEnumerable 是提供此功能最常見的方法。

常見的集合類型

標準集合類型,如 Collection<T>List<T> 和數組 (T[]),都實現了 ICollectionIEnumerable 接口,允許它們在 foreach 循環中使用。這是因為這些類型表示可以列舉的資料集合。

foreach 循環的工作原理

類似 foreach (int i in obj)foreach 循環大致轉換為以下程式碼:

<code class="language-csharp">var tmp = obj.GetEnumerator();
int i; // C# 4.0 之前
while (tmp.MoveNext())
{
    int i; // C# 5.0 及以后
    i = tmp.Current;
    // 你的代码
}</code>
登入後複製

tmp 變數儲存枚舉器,它負責遍歷集合。在每次迭代中,MoveNext() 方法將枚舉器推進到下一個元素,而 Current 屬性會傳回目前元素(該元素被賦值給循環變量,例如我們範例中的 i)。

變異體與釋放

根據實作的不同,枚舉器可能支援 IDisposable 介面。如果是這樣,當循環退出時,C# 將使用 using 模式自動釋放枚舉器。需要注意的是,在 C# 5.0 中,循環變數 (int i) 的聲明移到了循環內部,如果您打算在匿名方法或 lambda 表達式中使用該變量,這一點至關重要。

以上是是什麼讓 C# 類別可以使用 Foreach 迴圈進行迭代?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板