编译后,Func <T,bool>和Predicate <T>是不是一回事?
时间:2020-03-05 18:44:30 来源:igfitidea点击:
还没有启动反射器来观察差异,但是当比较Func <T,bool>
与Predicate <T>
时,希望看到完全相同的编译代码。
我会想象没有什么区别,因为两者都使用通用参数并返回布尔值?
解决方案
回答
它们共享相同的签名,但是它们仍然是不同的类型。
回答
Robert S.是完全正确的;例如:-
class A { static void Main() { Func<int, bool> func = i => i > 100; Predicate<int> pred = i => i > 100; Test<int>(pred, 150); Test<int>(func, 150); // Error } static void Test<T>(Predicate<T> pred, T val) { Console.WriteLine(pred(val) ? "true" : "false"); } }
回答
更加灵活的Func
系列仅在.NET 3.5中出现,因此它将在功能上复制必须早些时候包括在内的类型。
(加上名称"谓词"可将预期的用法传达给源代码的读者)