字典和Lambdas很有趣

时间:2009-04-08 15:15:05

标签: c# dictionary lambda

为什么要编译:

public Dictionary<ValueLineType, 
                  Func<HtmlHelper, 
                       string, 
                       object, 
                       Type, 
                       string>> constructor = 
       new Dictionary<ValueLineType, 
                      Func<HtmlHelper, 
                           string, 
                           object, 
                           Type, 
                           string>>();

但不是另一个在Func(布尔值)中有一个额外参数:

public Dictionary<ValueLineType, 
                  Func<HtmlHelper, 
                       string, 
                       object, 
                       Type, 
                       bool,  
                       string>> constructor = 
       new Dictionary<ValueLineType, 
                      Func<HtmlHelper, 
                           string, 
                           object, 
                           Type, 
                           bool, 
                           string>>();

要么我失明了,要么我今天要学习其他东西:D

4 个答案:

答案 0 :(得分:18)

没有Func<T1,T2,T3,T4,T5,TResult>之类的东西。它只能达到4个参数(即5个类型参数,包括一个用于返回值):

Func<T>
Func<T1, TResult>
Func<T1, T2, TResult>
Func<T1, T2, T3, TResult>
Func<T1, T2, T3, T4, TResult>
SpinalTap<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, TResult>

您当然可以声明自己的声明:

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

然而,在那一点上,我会仔细考虑您是否可以将这些参数封装在一起。他们完全不相关吗?

答案 1 :(得分:10)

仅供参考,下一版本的.NET库将包含超过四个参数的Func和Action泛型类型。

答案 2 :(得分:3)

由名为Func的框架定义的不同类包含1到5个参数。您需要定义自己的类,需要6。

答案 3 :(得分:0)

Func only需要4个参数和一个TResult