一个集合的要求是什么,这样我们才能在上面加上foreach

本文关键字:我们 在上面 foreach 是什么 一个 集合 | 更新日期: 2023-09-27 18:25:49

为了在c#中放置foreach,对集合的要求是什么?我们可以为每种类型设置哪些类型?

第1版:有人能想出一个实现Foreach的用户定义集合的示例代码吗。

一个集合的要求是什么,这样我们才能在上面加上foreach

它实现IEnumerableIEnumerable<T>

编辑:如果类型有一个名为GetEnumerator()的方法,它返回一个IEnumerator,那么它也可以在foreach中使用。看见http://brendan.enrick.com/post/Foreach-IEnumerable-IEnumerator-and-Duck-Typing.aspx

通常接受的是,您需要实现IEnumerableIEnumerable<T>,但您可以从Eric的帖子中了解到。遵循以下模式,并非如此

所需的是集合的类型必须具有公共方法,并且必须返回某个具有名为Current的公共属性getter和一个公共方法MoveNext返回bool。

唯一的形式要求是它有一个名为GetEnumerator()的方法,该方法返回具有SomeType Current {get;}属性和bool MoveNext()方法的东西。然而,最常见的是,这是通过实现IEnumerable/IEnumerable<T>接口来实现的。事实上,预期您将实现此接口(旧方法实际上是作为泛型前的优化),使用该接口将允许消费者将您的集合与LINQ和集合初始化器等一起使用。

在有趣的情况下,实现这种方法的最简单方法是通过"迭代器块"。例如:

class Foo : IEnumerable<int> {
    IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); }
    public IEnumerator<int> GetEnumerator() {
       yield return 16;
       yield return 12;
       yield return 31;
       // ^^ now imagine the above was a loop over some internal structure -
       // for example an array, list, linked-list, etc, with a "yield return"
       // per item
    }
}
相关文章: