编译后,Func <T,bool>和Predicate <T>不一样吗?

Sea*_*ers 21 .net c# predicate func

没有发射了反光看差异,但人们所期望看到比较时完全一样的编译代码Func<T, bool>Predicate<T>

我认为没有区别,因为它们都采用通用参数并返回bool?

Rob*_* S. 18

它们共享相同的签名,但它们仍然是不同的类型.


ljs*_*ljs 17

罗伯特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");
  }
}
Run Code Online (Sandbox Code Playgroud)