我写了一个实现的类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>.