Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#Func<;T、 布尔>;vs表达式<;Func<;T、 布尔>&燃气轮机;_C# - Fatal编程技术网

C#Func<;T、 布尔>;vs表达式<;Func<;T、 布尔>&燃气轮机;

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

在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);

C#编译器如何区分这两种方法?

接受
表达式的
重载是
IQueryable
的扩展方法,由于
IQueryable
扩展了
IEnumerable
,因此将首先选择它,因为C#

有关更多信息,请参考@Jon Skeet的主题:

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


。方法解析的标准规则适用
list.AsQueryable()
具有类型
IQueryable
,因此使用了
IQueryable.Where
。如果您对同一类型上声明的两个方法尝试了相同的操作,那么调用将是不明确的。@EdPlunkett是的,我同意,但是为什么
x=>x>0
Func
更接近
表达式呢?@Spiff事实并非如此。如果两个方法都在同一个类中定义,则无法解决重载问题(请尝试)。你问错问题了。读这篇文章。或者是mm8的回答。你说得对。谢谢,为什么要投反对票?这是正确的,不是吗?