如何定义迭代器接口类型?

mpe*_*pen 9 c#

我写了一个实现的类IEnumerable<T>.我有一个返回的方法MyClass.如果我尝试 yield return从该方法中,编译器告诉我"...不能是迭代器块,因为...不是迭代器接口类型".

那么,我该如何定义自己的接口迭代器类型呢?它是否必须是"抽象的"(不能定义任何方法)?

我想要做的是编写一堆可链接的方法,因此每个方法都应该返回一个实例MyClass.但我需要MyClass成为一种可枚举的东西.我没有使用某种基础数据类型,而是希望我可以yield return随处可见.


@Oded:

class SharpQuery : IEnumerable<HtmlNode>
{
    public SharpQuery Find(string selector)
    {
        foreach (var n in this)
        {
            // filter the results
            yield return node;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 13

不,那是不可能的.要了解为什么认为你有一个Zoo实现的类,IEnumerable<Animal>但也有很多其他成员.A Zoo是一个IEnumerable<Animal>但不一定反之亦然 - 一系列动物只是一系列动物.没有动物园饲养员,没有商店,没有入场费或任何使动物园成为动物园的东西.

当你使用yield return x返回类型不能Zoo因为你没有动物园 - 你只有一系列动物.

你可以做的是将其称为返回的new Zoo(foo())地方foo,IEnumerable<Animal>并添加一个Zoo接受的构造函数IEnumerable<Animal>.

  • 如果你只有方法,你可以在`IEnumerable <Animal>`上实现它们作为扩展方法.然后我认为你得到了你想要的东西 - 你可以很容易地使用屈服,你可以在序列上使用专门的方法. (3认同)