12

哪一个更好,比如方法中的参数类型(与 LINQ 无关)。显然 Func 更好,因为它更简单,更具描述性,如果每个人都使用它,一切都会变得兼容(好)。但是我注意到微软在某些库中使用了自己的委托,例如事件处理程序。那么,它们各自的优缺点是什么?我应该什么时候使用它?

编辑:

  • 显然 Func<> 仅在 3.5 中可用,所以这可能是我看到非 Func 代表的主要原因。还有其他不使用 Func 的理由吗?(例如:是来自 .NET4)

  • 同样的问题也适用于 Action<>

4

5 回答 5

5

当非常清楚它们的用途并且输入的数量很少时, Func<> 很有用。

当输入的数量更大,或者意图可能存在一些歧义时 - 然后使用带有命名参数的委托会使事情变得更清晰。

于 2010-12-16T07:43:22.340 回答
1

它们在所有目的上都是相同的,除非方法有Expression参数。那些需要被定义为 'lambda' 而不是delegate. 这在处理IQueryable和获取IEnumerable调用/解析时(例如 LINQ2SQL)将是非常有问题的。

于 2010-12-16T07:57:22.853 回答
1

如果 Func<> 和 Action<> 确实适合您的情况,则它们是更可取的。运行时创建程序中使用的每种类型的实例,如果您使用 Func 一次,则意味着创建了该类型的实例。在自定义委托的情况下,事情会以不同的方式进行,即使它们本质上与现有的类型相似,也会创建新类型。

然而,有时自定义委托使代码更清晰。

于 2010-12-16T08:15:31.753 回答
1

但是我注意到微软在某些库中使用了自己的委托,例如事件处理程序。那么,它们各自的优缺点是什么?我应该什么时候使用它?

其中一些是历史性的:在 C#3/.NET3 之前定义的 API 何时Action<>添加Func<>。For events EventHandler<T>是事件的更好选择,因为它强制执行正确的约定。

于 2010-12-16T08:51:05.537 回答
0

您始终可以创建一个包含 n 个输入作为类属性的类,并在 func<> 委托中将类的对象传递给单个输入

于 2010-12-16T07:52:08.197 回答