C#中的foreach循環
問:哪些物件類型支援foreach循環?
答: foreach
循環的核心使用需要一個傳回具有MoveNext()
方法和Current
屬性的物件的GetEnumerator()
方法。簡單來說,最常見的類型是實現了IEnumerable
/IEnumerable<T>
的類型。這包括ICollection
/ICollection<T>
的實現,例如Collection<T>
、List<T>
、陣列等等。
它是如何運作的?
一個形如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>
IEnumerator
物件(tmp
)用於遍歷集合的元素,並在每次迭代中將其賦值給循環變數。如果枚舉器支援Dispose()
方法,則會呼叫它,就像使用using
語句一樣。
注意: 循環變數宣告「int i
」的位置在C# 4.0和C# 5.0之間有所不同。 C# 5.0在循環內宣告它,而C# 4.0在循環外宣告它。當在循環中使用循環變數在閉包或lambda表達式中時,這種區別很重要。
以上是哪些 C# 物件類型支援 foreach 循環以及它們如何運作?的詳細內容。更多資訊請關注PHP中文網其他相關文章!