Avatar ·

Func、Action和Predicate在C#中有什么区别?何时使用哪个?

大家好!我最近开始学习C#,遇到了内置委托:Func、Action和Predicate。它们看起来都很相似——都是一些泛型委托,但我搞不清楚什么时候该用哪个。

我知道它们都允许将方法作为参数传递,但它们的签名不同。例如,我见过这样的代码:

Func<int, int, int> add = (x, y) => x + y;
Action<string> print = s => Console.WriteLine(s);
Predicate<int> isEven = x => x % 2 == 0;

看起来这三个都接受参数并执行某些操作。但为什么检查偶数要用Predicate,而不是Func<int, bool>?而且如果可以用返回类型为void的Func,为什么还需要Action?

请告诉我这三种委托类型之间的根本区别,以及在具体情况下如何选择正确的委托。