Action 是 C# 预先定义好的委托之一。它封装了一个没有返回值的方法。

Action 可以有 0~16 个参数。

public delegate void Action<in T1, ... in T16>(T1 arg1, ... T16 arg16);

in 在这里表示逆变

所以

public delegate void Print(int val);
 
static void ConsolePrint(int i)
{
    Console.WriteLine(i);
}
 
static void Main(string[] args)
{           
    Print prnt = ConsolePrint;
    prnt(10);
}
 

可以写成

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

与其他 delegate 一样,Action 也可以和匿名函数lambda 表达式一起使用:

static void Main(string[] args)
{
    Action<int> printActionDel2 = delegate(int i)
                                {
                                    Console.WriteLine(i);
                                };
    printActionDel2(10);
 
	Action<int> printActionDel3 = i => Console.WriteLine(i);
    printActionDel3(10);
}
/* Output: 
	10
	10
*/

See also