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中文网其他相关文章!