覆盖IEnumerable <t>其中

时间:2015-08-25 16:07:42

标签: c# generics ienumerable

我编写了一个实现IEnumerable的类:

public class MyEnumerable : IEnumerable<MyClass>
{ 
    IEnumerator IEnumerable.GetEnumerator()
    {
        return this.GetEnumerator();
    }
    public IEnumerator<MyClass> GetEnumerator()
    {
        //Enumerate
    }
}

我想&#34;覆盖&#34; Where方法。我想做的是:

MyEnumerable myEnumerable = new MyEnumerable();
MyEnumerable myEnumerable2 = myEnumerable.Where(/*some predicate*/);

暂时不可能,因为myEnumerable.Where()返回一个IEnumerable。 我想要的是myEnumerable.Where()返回一个MyEnumerable。

可以这样做吗?

谢谢

1 个答案:

答案 0 :(得分:5)

当然 - 只需向Where添加MyEnumerable方法即可。 Linq Where方法是扩展方法,因此从技术上讲它不是覆盖。你隐藏&#34; linq方法。

public class MyEnumerable : IEnumerable<MyClass>
{ 
    IEnumerator IEnumerable.GetEnumerator()
    {
        return this.GetEnumerator();
    }
    public IEnumerator<MyClass> GetEnumerator()
    {
        //Enumerate
    }

    public MyEnumerable Where()
    {
       // implement `Where`
    }
}

但有一些警告:

  • 只有声明的类型为MyEnumerable时,才会调用Where方法 - 不会在IEnumerable<MyClass>类型的变量(或任何实现它的集合,如List<MyClass> < / LI>
  • 如果你想与Linq保持一致,还需要实现Where的几个重载。