为什么Func和Action Delegates只接受4个参数?

时间:2008-12-23 03:19:46

标签: c#

为什么4?我知道它在文档中是4,但这看起来很奇怪。

6 个答案:

答案 0 :(得分:6)

我会站出来说这是因为有人需要一个Action或Func委托在框架中的某个地方有4个参数而没有人需要一个5个。或者,有人决定任何超过4个你和你@chadmyers说,应该引入一个类来保持价值观。

答案 1 :(得分:2)

我不知道确切的答案,但我猜这与以下事实有关:如果你传递带有> 4个参数的代表,那就是代码味道,你可能做错了什么。您应该考虑使用“Introduce Parameter Object”重构。

答案 2 :(得分:1)

很奇怪,人们需要消耗四种类型的对象,封装它们,操纵它们,并在一个类中跟踪它们。

我甚至认为,除了三种不同的类型之外,你的泛型类已经走得太远了。通常你必须考虑你的类型如何相互作用的排列,例如,1种类型很好,1 x 2很好,3种你有6种方法来操纵你的类型,4种你有24种组合可供选择,所以你也应该考虑到这种复杂性。

答案 3 :(得分:1)

首先,我同意其他人认为5个args的函数签名可能会有点长。话虽如此,在我作为开发人员的时候,我已经写了很多长函数签名。

您始终可以编写自己的重载通用委托。你甚至可以将它们放在系统中(我不会)。

namespace System
{
  public delegate void Action<T1, T2, T3, T4, T5>(T1 arg1, T2 arg2, 
                                                  T3 arg3, T4 arg4, T5 arg5);
  public delegate ReturnT Action<ReturnT, T1, T2, T3, T4, T5>(T1 arg1, 
                                         T2 arg2, T3 arg3, T4 arg4, T5 arg5);
}

编辑:自从我撰写这篇文章以来,.Net 4.已经到了,并且有了这些代表的更长版本。

答案 4 :(得分:1)

在.NET 4.0中,您可以获得更多 - 最多16 parameters

尽管使用这样的例行可能会在可读性方面稍微考虑一下......

答案 5 :(得分:0)

因为拥有那么多参数的委托是一个糟糕的开发模式。 它使你的代码非常耦合和复杂。