我编写了一个实现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。
可以这样做吗?
谢谢
答案 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>
Where
的几个重载。