是否有超过4个参数的Func对象?

时间:2009-12-22 12:28:06

标签: c# .net

我看到here Func<(Of <(T1, T2, T3, T4, TResult>)>) Delegate是命名空间中的最后一个Func。如果您需要4个以上的参数,该怎么办?

3 个答案:

答案 0 :(得分:8)

您可以创建自己的Func代理,也可以等待.NET 4到达(它包含内置FuncAction代表,最多包含16个参数)。

正如其他人所提到的,如果你发现自己需要一个接受这么多参数的委托,那么也许是时候考虑某种重构了。

public delegate TResult Func<T1, T2, T3, T4, T5, TResult>
    (T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5);

public delegate TResult Func<T1, T2, T3, T4, T5, T6, TResult>
    (T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6);

public delegate TResult Func<T1, T2, T3, T4, T5, T6, T7, TResult>
    (T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7);

public delegate TResult Func<T1, T2, T3, T4, T5, T6, T7, T8, TResult>
    (T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8);

// etc

答案 1 :(得分:4)

在.Net 4中,有超载直到17(给予或接受)参数。

就个人而言,我认为这是疯了。如果您需要4个以上的参数,那么就该创建一个新类,其中包含您需要的所有参数作为属性。

答案 2 :(得分:2)

创建一个参数对象,也许?

重构目录有一个good description.

善,