覆盖IEnumerable <T>在哪里

Clé*_*cou 1 c# generics ienumerable

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

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

我想"覆盖"Where方法.我想做的是:

MyEnumerable myEnumerable = new MyEnumerable();
MyEnumerable myEnumerable2 = myEnumerable.Where(/*some predicate*/);
Run Code Online (Sandbox Code Playgroud)

目前这是不可能的,因为myEnumerable.Where()返回一个IEnumerable.我想要的是myEnumerable.Where()返回一个MyEnumerable.

这有可能吗?

谢谢

D S*_*ley 5

当然 - 只需添加Where方法即可MyEnumerable.Linq Where方法是一种扩展方法,因此从技术上讲它不是一种覆盖.你正在"隐藏"linq方法.

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

    public MyEnumerable Where()
    {
       // implement `Where`
    }
}
Run Code Online (Sandbox Code Playgroud)

但是有一些警告:

  • 只有当声明的类型是MyEnumerable- 它才会被调用,而不会在类型的变量IEnumerable<MyClass>(或任何实现它的集合,如List<MyClass>
  • Where如果您想要与Linq保持一致,还需要实现几个重载.