字典和Lambdas很有趣

ant*_*ioh 5 c# lambda dictionary

为什么这会编译:

public Dictionary<ValueLineType, 
                  Func<HtmlHelper, 
                       string, 
                       object, 
                       Type, 
                       string>> constructor = 
       new Dictionary<ValueLineType, 
                      Func<HtmlHelper, 
                           string, 
                           object, 
                           Type, 
                           string>>();
Run Code Online (Sandbox Code Playgroud)

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

public Dictionary<ValueLineType, 
                  Func<HtmlHelper, 
                       string, 
                       object, 
                       Type, 
                       bool,  
                       string>> constructor = 
       new Dictionary<ValueLineType, 
                      Func<HtmlHelper, 
                           string, 
                           object, 
                           Type, 
                           bool, 
                           string>>();
Run Code Online (Sandbox Code Playgroud)

要么我失明了,要么我今天要学习别的东西:D

Jon*_*eet 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>
Run Code Online (Sandbox Code Playgroud)

当然,您可以申报自己的:

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

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


Eri*_*ert 10

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