C# C中谓词和Func委托的区别#
我是C#的初学者,只是一个关于C中谓词和Func委托之间区别的问题# 我们知道:C# C中谓词和Func委托的区别#,c#,.net,delegates,C#,.net,Delegates,我是C#的初学者,只是一个关于C中谓词和Func委托之间区别的问题# 我们知道: public delegate bool Predicate<in T>(T obj); public delegate TResult Func<in T, out TResult>(T arg); 公共委托布尔谓词(T obj); 公共委托TResult Func(T参数); 如果我真的喜欢 Func<Product, bool> firstdelegate = ...
public delegate bool Predicate<in T>(T obj);
public delegate TResult Func<in T, out TResult>(T arg);
公共委托布尔谓词(T obj);
公共委托TResult Func(T参数);
如果我真的喜欢
Func<Product, bool> firstdelegate = ...
Func firstdelegate=。。。
及
谓词第二谓词=。。。
他们不一样吗?我的意思是它们都做相同的事情,那么为什么在LINQ中,Where()方法采用Func类型的委托而不是谓词呢?是在.NET 2.0中引入泛型的。它是一个接受一个参数并返回bool
的委托
然而,随着.NET 3.5中LINQ的引入,确定了需要两个泛型类型的族-和(区别在于它们是否返回任何内容),它们最多占用16 41个泛型输入参数,并且在它们的返回类型中是泛型的。如果Func
首先存在,Predicate
将永远不会首先被创建。这是一种不必要的特殊委托类型
但是,出于向后兼容性的原因,它们现在无法从框架中删除谓词。有人可能会说它的名字确实传达了特定的语义,但我很难确定在许多情况下,任何Func
(或Func
等)都不会被视为谓词
如果LINQ在Where
中使用Predicate
,但在其他任何地方使用Func
,包括Where
的另一个重载Where
是类点1{int x,y;}
与类点2{int x,y;}
相同,那就很奇怪了?当然不是,但他们有相似之处。但是需要Point1的方法永远不会接受Point2实例作为参数。Delagate与signature不兼容。AFAIK、.NET 3.5仅引入了最多包含4个参数的变体。@PetSerAl-已更正并添加脚注。
Predicate<Product> secondpredicate = ...