C#Func <T,bool>与Expression <Func <T,bool >>

时间:2019-09-19 14:32:45

标签: c#

在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#编译器如何区分这两种方法?

1 个答案:

答案 0 :(得分:0)

接受Where的{​​{1}}的重载是Expression<Func<T, bool>>的扩展方法,并且由于IQueryable<T>扩展了IQueryable<T>,因此,由于C#中的重载解析机制。

有关更多信息,请参阅@Jon Skeet的article

  

如果在层次结构的不同级别上有两种方法,则将首先选择“更深层次”的方法...