foreach循环如何在C#中工作?哪些类可以使用foreach循环?
2 回答
噜噜哒
TA贡献1784条经验 获得超7个赞
实际上,严格来说,您需要使用的foreach
只是一个使用方法和属性GetEnumerator()
返回内容的公共方法。但是,最常见的含义是“实现/ ,返回/的东西” 。bool MoveNext()
? Current {get;}
IEnumerable
IEnumerable<T>
IEnumerator
IEnumerator<T>
通过暗示,这包括任何实现ICollection
/ ICollection<T>
,如像什么Collection<T>
,List<T>
,阵列(T[]
)等。因此,任何标准的“数据集”将通常支持foreach
。
为了证明第一点,以下工作正常:
using System;class Foo { public int Current { get; private set; } private int step; public bool MoveNext() { if (step >= 5) return false; Current = step++; return true; }}class Bar { public Foo GetEnumerator() { return new Foo(); }}static class Program { static void Main() { Bar bar = new Bar(); foreach (int item in bar) { Console.WriteLine(item); } }}
它是如何工作的?
像foreach(int i in obj) {...}
有点类似的foreach循环等同于:
var tmp = obj.GetEnumerator();int i; // up to C# 4.0while(tmp.MoveNext()) { int i; // C# 5.0 i = tmp.Current; {...} // your code}
但是,有变化。例如,枚举器(tmp)支持IDisposable
,它也被使用(类似于using
)。
注意循环中内部(C#5.0)与外部(上升C#4.0)的声明“ int i
” 的位置不同。如果您在代码块中使用匿名方法/ lambda,这一点很重要。但那是另一个故事;-pi
- 2 回答
- 0 关注
- 371 浏览
添加回答
举报
0/150
提交
取消