加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 08:07:45 所属栏目:百科 来源:网络整理
导读:我写了一个实现IEnumerable T的类.我有一个返回MyClass的方法.如果我尝试从该方法中产生返回,编译器会告诉我“…不能是迭代器块,因为…不是迭代器接口类型”. 那么,我该如何定义自己的接口迭代器类型呢?它是否必须是“抽象的”(不能定义任何方法)? 我想要
我写了一个实现IEnumerable< T>的类.我有一个返回MyClass的方法.如果我尝试从该方法中产生返回,编译器会告诉我“…不能是迭代器块,因为…不是迭代器接口类型”.

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

我想要做的是编写一堆可链接的方法,因此每个方法都应该返回一个MyClass实例.但我需要MyClass成为一种可枚举的东西.我没有使用某种基础数据类型,而是希望我能在任何地方获得回报.

@Oded:

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

解决方法

不,那是不可能的.为什么要考虑你有一个实现IEnumerable< Animal>的类动物园?但也有很多其他成员. Zoois是IEnumerable< Animal>但不一定相反 – 一系列动物只是一系列动物.没有动物园饲养员,没有商店,没有入场费或任何使动物园成为动物园的东西.

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读