C产品如何满足特定用户需求?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1048个文字,预计阅读时间需要5分钟。
选择 Action 还是 Func,只看一件事:
为什么 Func 合法而 Func 编译报错
Func 的设计强制要求有返回值——它的最后一个泛型参数就是返回类型,不能省,也不能是 void。所以 Func<void></void> 语法非法,编译器直接报 CS0453;而 Action 天然对应 void,所有重载都不带返回类型声明。
-
Func<int></int>✅ 表示「不接收参数,返回int」 -
Func<string bool></string>✅ 表示「接收string,返回bool」 -
Func<int void></int>❌ 编译失败:不是语法支持的泛型形式 -
Action<int></int>✅ 表示「接收int,无返回」
Predicate 不是新类型,只是 Func 的别名
Predicate<t></t> 和 Func<t bool></t> 在 IL 层和运行时完全等价,连内存布局都一样。它唯一的作用是语义提示:你传的这个函数,是用来做“是/否判断”的。
本文共计1048个文字,预计阅读时间需要5分钟。
选择 Action 还是 Func,只看一件事:
为什么 Func 合法而 Func 编译报错
Func 的设计强制要求有返回值——它的最后一个泛型参数就是返回类型,不能省,也不能是 void。所以 Func<void></void> 语法非法,编译器直接报 CS0453;而 Action 天然对应 void,所有重载都不带返回类型声明。
-
Func<int></int>✅ 表示「不接收参数,返回int」 -
Func<string bool></string>✅ 表示「接收string,返回bool」 -
Func<int void></int>❌ 编译失败:不是语法支持的泛型形式 -
Action<int></int>✅ 表示「接收int,无返回」
Predicate 不是新类型,只是 Func 的别名
Predicate<t></t> 和 Func<t bool></t> 在 IL 层和运行时完全等价,连内存布局都一样。它唯一的作用是语义提示:你传的这个函数,是用来做“是/否判断”的。

