C#Func<;T、 布尔>;vs表达式<;Func<;T、 布尔>&燃气轮机;
在C#中,考虑到:C#Func<;T、 布尔>;vs表达式<;Func<;T、 布尔>&燃气轮机;,c#,C#,在C#中,考虑到: IEnumerable声明Where(Func) IQueryable扩展IEnumerable IQueryable声明Where(表达式)) 使用此选项时: var list = new List<int>(); var positives = list.AsQueryable().Where(x => x > 0); var list=newlist(); var positives=list.AsQueryable(),其中(x=>x>0
声明IEnumerable
Where(Func)
扩展IQueryable
IEnumerable
声明IQueryable
Where(表达式))
var list = new List<int>();
var positives = list.AsQueryable().Where(x => x > 0);
var list=newlist();
var positives=list.AsQueryable(),其中(x=>x>0);
C#编译器如何区分这两种方法?接受
表达式的重载是IQueryable
的扩展方法,由于IQueryable
扩展了IEnumerable
,因此将首先选择它,因为C#
有关更多信息,请参考@Jon Skeet的主题:
如果在层次结构的不同层次上有两种方法,那么将首先选择“更深层次”的方法
。方法解析的标准规则适用list.AsQueryable()
具有类型IQueryable
,因此使用了IQueryable.Where
。如果您对同一类型上声明的两个方法尝试了相同的操作,那么调用将是不明确的。@EdPlunkett是的,我同意,但是为什么x=>x>0
比Func
更接近表达式呢?@Spiff事实并非如此。如果两个方法都在同一个类中定义,则无法解决重载问题(请尝试)。你问错问题了。读这篇文章。或者是mm8的回答。你说得对。谢谢,为什么要投反对票?这是正确的,不是吗?