哪一个更好,比如方法中的参数类型(与 LINQ 无关)。显然 Func 更好,因为它更简单,更具描述性,如果每个人都使用它,一切都会变得兼容(好)。但是我注意到微软在某些库中使用了自己的委托,例如事件处理程序。那么,它们各自的优缺点是什么?我应该什么时候使用它?
编辑:
显然 Func<> 仅在 3.5 中可用,所以这可能是我看到非 Func 代表的主要原因。还有其他不使用 Func 的理由吗?(例如:这是来自 .NET4)
同样的问题也适用于 Action<>
当非常清楚它们的用途并且输入的数量很少时, Func<> 很有用。
当输入的数量更大,或者意图可能存在一些歧义时 - 然后使用带有命名参数的委托会使事情变得更清晰。
它们在所有目的上都是相同的,除非方法有Expression
参数。那些需要被定义为 'lambda' 而不是delegate
. 这在处理IQueryable
和获取IEnumerable
调用/解析时(例如 LINQ2SQL)将是非常有问题的。
如果 Func<> 和 Action<> 确实适合您的情况,则它们是更可取的。运行时创建程序中使用的每种类型的实例,如果您使用 Func 一次,则意味着创建了该类型的实例。在自定义委托的情况下,事情会以不同的方式进行,即使它们本质上与现有的类型相似,也会创建新类型。
然而,有时自定义委托使代码更清晰。
但是我注意到微软在某些库中使用了自己的委托,例如事件处理程序。那么,它们各自的优缺点是什么?我应该什么时候使用它?
其中一些是历史性的:在 C#3/.NET3 之前定义的 API 何时Action<>
添加Func<>
。For events EventHandler<T>
是事件的更好选择,因为它强制执行正确的约定。
您始终可以创建一个包含 n 个输入作为类属性的类,并在 func<> 委托中将类的对象传递给单个输入