C# Action 委托

Action是在 System 命名空间中定义的委托类型。Action类型委托与Func委托相同,除了Action委托不返回值。换句话说,可以将Action委托与具有void返回类型的方法一起使用。

什么是Action泛型委托

Action<T>是.NET Framework内置的泛型委托,可以使用Action<T>委托以参数形式传递方法,而不用显示声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说,封装的方法必须具有一个通过值传递给它的参数,并且不能有返回值。

例如,以下委托打印一个int值。

public delegate void Print(int val);

static void ConsolePrint(int i)
{
    Console.WriteLine(i);
}

static void Main(string[] args)
{           
    Print prnt = ConsolePrint;
    prnt(10);
}
输出:
10

您可以使用Action委托代替上面定义的Print委托,例如:

static void ConsolePrint(int i)
{
    Console.WriteLine(i);
}

static void Main(string[] args)
{
    Action<int> printActionDel = ConsolePrint;
    printActionDel(10);
}

您可以使用 new 关键字或直接分配一个方法来初始化Action委托:

Action<int> printActionDel = ConsolePrint;

//或者

Action<int> printActionDel = new Action<int>(ConsolePrint);

Action 委托最多可以接受16个不同类型的输入参数。

Action委托 与 匿名方法

还可以将 匿名方法 分配给 Action 委托,例如:

static void Main(string[] args)
{
    Action<int> printActionDel = delegate(int i)
                                {
                                    Console.WriteLine(i);
                                };

    printActionDel(10);
}
输出:
10

Action委托与Lambda表达式

Lambda表达式也可以与Action委托一起使用:

static void Main(string[] args)
{

    Action<int> printActionDel = i => Console.WriteLine(i);
       
    printActionDel(10);
}

因此,您可以使用任何不使用Action委托类型返回值的方法。

Action 委托使用举例说明

  • Action委托至少0个参数,至多16个参数,无返回值。

  • Action 表示无参,无返回值的委托。

  • Action<int,string> 表示有传入参数int,string,无返回值的委托。

  • Action<int,string,bool> 表示有传入参数int,string,bool,无返回值的委托。

  • Action<int,int,int,int> 表示有传入4个int型参数,无返回值的委托。

Action 和 Func 委托的优点

  1. 轻松快捷地定义委托。

  2. 使代码简短。

  3. 整个应用程序中的兼容类型。

要记住的要点

  1. Action 委托与 Func 委托相同,只是 Action 委托 不返回任何内容。返回类型必须为 void。

  2. Action 委托可以具有0到16个输入参数。

  3. Action 委托可以与匿名方法 或 lambda表达式一起使用。