C# 中 Action 和 Func

Action 和 Func 有着比委托更简洁的代码。

你可以把 Action、Func 看作是无返回值、有返回值的方法类型。

Action 示例

Action act = () =>
{
	Response.Write("我是无参数的方法。");
};

Action<int> act2 = (m) =>
{
	Response.Write("我是有参数的方法,参数值是:" + m);
};

act();
act2(1);

Action 支持 0-16 个参数,比如 Action<int, string>。

Func 示例

Func<int> func = () =>
{
	return 2;
};

Func<int, int> func2 = (m) =>
{
	return m * 2;
};

Response.Write(func()); // 2
Response.Write(func2(2)); // 4

Func 支持 0-16 个参数,最后一个泛型元素是返回值类型。

为什么需要 Action、Func?

上述示例,似乎看不出 Action、Func 有什么用,为何不直接用方法?

其实,某些场景还是有用的:比如我想把方法作为参数来传递时,就需要

private int Cal1(int m)
{
	return m * 2;
}


private int Cal2(int m)
{
	return m / 2;
}


private int Cal(Func<int, int> cal)
{
	return cal(2);
}


protected void Page_Load(object sender, EventArgs e)
{
	Response.Write(Cal(Cal1)); // 4
	Response.Write(Cal(Cal2)); // 1
}

相关阅读

  • C# 3.0 - Lambda

  • 抛弃传统,用委托、Lambda、Linq 取 List 中的项 

  • C# Predicate<T>

  • 一个简明的 C# 事件示例

  • Action 委托 (System) | Microsoft Docs

  • 对 Func 和 Action 泛型委托使用变体 (C#) | Microsoft Docs


你可能感兴趣的