在C#中,鉴于:
IEnumerable<T>
声明Where(Func<T, bool>)
IQueryable<T>
扩展了IEnumerable<T>
IQueryable<T>
声明Where(Expression<Func<T, bool>>))
使用此功能时:
var list = new List<int>();
var positives = list.AsQueryable().Where(x => x > 0);
C#编译器如何区分这两种方法?
答案 0 :(得分:0)
接受Where
的{{1}}的重载是Expression<Func<T, bool>>
的扩展方法,并且由于IQueryable<T>
扩展了IQueryable<T>
,因此,由于C#中的重载解析机制。
有关更多信息,请参阅@Jon Skeet的article:
如果在层次结构的不同级别上有两种方法,则将首先选择“更深层次”的方法...