C# Func 委托

C#包含内置的泛型委托类型 Func 和 Action,因此在大多数情况下您不需要手动定义自定义委托。

Func是包含在 System 命名空间中的泛型委托。它有零个或多个输入参数和一个 out 参数。最后一个参数被视为 out  参数。

什么是Func委托

Func 委托代表有返回类型的委托。

Func 在 System 命名空间中定义了一个 in 参数和一个 out 参数 的委托,如下所示:

namespace System
{    
    public delegate TResult Func<in T, out TResult>(T arg);
}

尖括号中的最后一个参数<>被视为返回类型,其余参数被视为输入参数类型,如下图所示。

Func 委托

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

Func 委托

以下Func委托接受两个int类型的输入参数,并返回一个int类型的值:

Func<int, int, int> sum;

您可以为上面的func委托分配任何方法,这些方法需要两个int参数并返回一个int值。

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); 
    }
}
输出:
20

Func委托类型可以包括0到16个不同类型的输入参数。但是,它必须包含用于结果的out参数。例如,以下Func委托没有任何输入参数,并且仅包含out参数。

Func<int> getRandomNumber;

Func 委托示例说明

  • Func 至少0个输入参数,至多16个输入参数,根据返回值泛型返回。必须有返回值,不可void。

  • Func<int> 表示没有输入参数,返回值为int类型的委托。

  • Func<object,string,int> 表示传入参数为object, string ,返回值为int类型的委托。

  • Func<object,string,int> 表示传入参数为object, string, 返回值为int类型的委托。

  • Func<T1,T2,,T3,int> 表示传入参数为T1,T2,,T3(泛型),返回值为int类型的委托。

C# Func 委托与匿名方法

您可以使用 delegate 关键字将匿名方法分配给 Func 委托。

Func<int> getRandomNumber = delegate()
                            {
                                Random rnd = new Random();
                                return rnd.Next(1, 100);
                            };

C# Func 委托与Lambda

Func委托也可以与lambda表达式一起使用,如下所示:

Func<int> getRandomNumber = () => new Random().Next(1, 100);

//或者

Func<int, int, int>  Sum  = (x, y) => x + y;

 要记住的要点

  1. Func 是内置委托类型。

  2. Func 委托类型必须返回一个值。

  3. Func 委托类型可以具有零到16个输入参数。

  4. Func 委托不允许 ref 和 out参数。

  5. Func 委托类型可以与匿名方法或lambda表达式一起使用。