为什么4?我知道它在文档中是4,但这看起来很奇怪。
答案 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)
因为拥有那么多参数的委托是一个糟糕的开发模式。 它使你的代码非常耦合和复杂。