2009-04-08 11 views
5

なぜだろう、このコンパイル:辞書とラムダの楽しみ

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

ではなく、1つの余分のFunc(ブーリアン)内のパラメータを持つこの他の1:

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

どちらか私は取得していますブラインドかD

+0

ところで、2行目のエラーは: "ジェネリック型 'System.Func 'を使用するには '2'型の引数" – antonioh

+3

BTWが必要です、 'var'キーワードは新しい友達です。 http://msdn.microsoft.com/en-us/library/bb383973.aspxおよびhttp://stackoverflow.com/questions/9033#9035を参照してください。 – lacop

+0

すべてのことを2回書くよりはるかに良い! – antonioh

答えて

18

Func<T1,T2,T3,T4,T5,TResult>のようなものはありません。あなたはもちろん、自分自身を宣言することができ

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を含む、すなわち5 タイプパラメータ、)まで4などのパラメータを行きますその点については、これらのパラメータのいくつかを一緒にカプセル化できるかどうかについて本当に注意深く考えています。彼らは完全に無関係ですか?

+0

しかし、ジェネリックの代理人であるため、自分自身を追加できない理由はありません。 – Samuel

+0

確かに。編集中... –

+0

@Me:4つ以上のパラメータであなた自身を追加してください。 – Samuel

3

Funcという名前のフレームワークで定義されているさまざまなクラスが1〜5個のパラメータを取ります。あなたは自分のクラスを定義する必要があります。

+0

Funcは4つまでのパラメータを定義しますが、5 * type *のパラメータのみを定義します。 –

0

Func onlyは4つの引数を取り、TResult

10

FYI、.NETライブラリの次のバージョンは、つ以上のパラメータののFuncとアクションジェネリック型が含まれます。

関連する問題