2009-04-08 7 views
5

왜 것이 컴파일 :사전 및 람다 재미

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

+0

그런데 두 번째 줄의 오류는 다음과 같습니다. "제네릭 형식 'System.Func '을 사용하려면 '2'형식 인수가 필요합니다. – antonioh

+3

BTW, 'var'키워드는 새 친구입니다. http://msdn.microsoft.com/en-us/library/bb383973.aspx 및 http://stackoverflow.com/questions/9033#9035를 참조하십시오. – lacop

+0

두 번 쓰는 것보다 훨씬 낫다! – 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); 

그러나에 그것은 단지 (반환 값에 대한 것을 포함하여, 즉 5 유형 매개 변수)까지 4와 같은 매개 변수를 간다 그 점은 당신이 매개 변수의 일부를 함께 캡슐화 할 수 있는지에 대해 정말로 신중하게 생각할 것입니다. 그들은 완전히 관련이 없습니까?

+0

그러나 제네릭을 사용한 델리게이트이기 때문에 직접 추가 할 수 없습니다. – Samuel

+0

실제로. 편집 중 ... –

+0

@Me : 4 개 이상의 매개 변수로 자신을 추가하십시오. – Samuel

3

Func라는 프레임 워크에서 정의 된 클래스가 1에서 5 개까지 있습니다. 자신 만의 클래스를 정의해야합니다.

+0

Func는 4 개의 매개 변수까지만 정의하지만 5 * 유형 * 매개 변수는 정의합니다. –

0

Func only 4 개 이상의 매개 변수의 Func을하고 액션 일반적인 유형을 포함, FYI의 .NET 라이브러리의 다음 버전을 사 개 인수하고, TResult

10

걸립니다.