IEnumerable是否需要使用foreach循环?

我想知道,我什么时候可以使用foreach循环? 我必须实现IEnumerable吗?

无需实现IEnumerable接口即可使用foreach语句。 以下是MSDN的引用( http://msdn.microsoft.com/en-us/library/9yb8xew9.aspx ):

在C#中,为了与foreach兼容,集合类不一定要从IEnumerable和IEnumeratorinheritance。 只要该类具有所需的GetEnumerator,MoveNext,Reset和Current成员,它就可以与foreach一起使用。 省略接口的优点是,您可以将Current的返回类型定义为比Object更具体,后者提供类型安全性。

您可以通过任何实现IEnumerableIEnumberable对象来IEnumberable

综合解释: http : //msdn.microsoft.com/en-us/library/aa664754%28VS.71%29.aspx

问问自己 – 你真的需要一个循环计数器

我使用的经验法则是确定我是否在两个索引容器之间移动数据,其中我确实需要一个索引值来寻址目标,或者更一般地说,’我是否需要为我正在处理的每个项目的索引计数循环’? 在这些情况下,我使用for循环,在几乎所有其他情况下(foreach可以处理容器,如上所述几乎每个容器) – 原因很简单,使用foreach和使用foreach看起来很愚蠢然后不得不去手动维护循环计数器的麻烦。