C# - Func 委托
C# 包含内置的泛型委托类型 Func
和 Action
,因此在大多数情况下您无需手动定义自定义委托。
Func
是一个包含在 System
命名空间中的泛型委托。它有零个或多个 _输入_ 参数和一个 _输出_ 参数。最后一个参数被视为输出参数。
Func 委托带有一个输入参数和一个输出参数,定义在 System
命名空间中,如下所示:
签名:Func
namespace System
{
public delegate TResult Func<in T, out TResult>(T arg);
}
尖括号 <>
中的最后一个参数被认为是返回类型,其余参数被认为是输入参数类型,如下图所示。

具有两个输入参数和一个输出参数的 Func 委托将如下所示。

以下 Func
委托接受两个 int 类型的输入参数并返回一个 int 类型的值。
Func<int, int, int> sum;
您可以将任何接受两个 _int_ 参数并返回 _int_ 值的方法分配给上述 Func 委托。
示例:Func
class Program
{
static int Sum(int x, int y)
{
return x + y;
}
static void Main(string[] args)
{
Func<int,int, int> add = Sum;
int result = add(10, 10);
Console.WriteLine(result);
}
}
输出
20Func 委托类型可以包含 0 到 16 个不同类型的输入参数。但是,它必须包含一个用于结果的输出参数。例如,以下 Func 委托没有任何输入参数,只包含一个输出参数。
示例:带零输入参数的 Func
Func<int> getRandomNumber;
带匿名方法的 C# Func
您可以使用 delegate 关键字将匿名方法分配给 Func 委托。
示例:带匿名方法的 Func
Func<int> getRandomNumber = delegate()
{
Random rnd = new Random();
return rnd.Next(1, 100);
};
带 Lambda 表达式的 Func
Func 委托也可以与 lambda 表达式一起使用,如下所示
示例:带 lambda 表达式的 Func
Func<int> getRandomNumber = () => new Random().Next(1, 100);
//Or
Func<int, int, int> Sum = (x, y) => x + y;
要记住的要点
- Func 是内置的委托类型。
- Func 委托类型必须返回一个值。
- Func 委托类型可以有零到 16 个输入参数。
- Func 委托不允许 ref 和 out 参数。
- Func 委托类型可以与匿名方法或 lambda 表达式一起使用。