深入理解 C# 中的 foreach 迴圈
C# 中的 foreach
循環是一種強大的語言結構,允許開發人員輕鬆有效地迭代集合中的元素。但是,類別究竟需要滿足哪些條件才能使用 foreach
迴圈呢?
可迭代的類別
任何實作了 IEnumerable
介面的類別都可以使用 foreach
迴圈進行迭代。從技術上講,該類別只需要提供一個傳回具有 MoveNext()
方法和 Current
屬性的物件的 GetEnumerator()
方法,但實作 IEnumerable
是提供此功能最常見的方法。
常見的集合類型
標準集合類型,如 Collection<T>
、List<T>
和數組 (T[]),都實現了 ICollection
或 IEnumerable
接口,允許它們在 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中文網其他相關文章!