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

前端之家收集整理的这篇文章主要介绍了c# – 如何定义迭代器接口类型?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我写了一个实现IEnumerable< T>的类.我有一个返回MyClass的方法.如果我尝试从该方法中产生返回,编译器会告诉我“…不能是迭代器块,因为…不是迭代器接口类型”.

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

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

@Oded:

  1. class SharpQuery : IEnumerable<HtmlNode>
  2. {
  3. public SharpQuery Find(string selector)
  4. {
  5. foreach (var n in this)
  6. {
  7. // filter the results
  8. yield return node;
  9. }
  10. }
  11. }

解决方法

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

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

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

猜你在找的C#相关文章