2009-04-08 14 views
5

dlaczego to kompilacji:Słowniki i lambdas zabawa

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

ale nie jest to druga z jednym dodatkowym parametrem w menu FUNC (Boolean):

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

Albo jestem ślepy albo coraz jest coś jeszcze, czego się dzisiaj nauczę: D

+0

Nawiasem mówiąc, błąd dla drugiej linii jest następujący: "Używanie typu ogólnego" System.Func "wymaga" argumentów typu 2 "" – antonioh

+3

BTW, słowo kluczowe "var" jest twoim nowym przyjacielem. Zobacz http://msdn.microsoft.com/en-us/library/bb383973.aspx i http://stackoverflow.com/questions/9033#9035. – lacop

+0

zdecydowanie lepiej niż pisanie wszystkiego dwa razy! – antonioh

Odpowiedz

18

Nie ma czegoś takiego jak Func<T1,T2,T3,T4,T5,TResult>. To tylko idzie tak daleko, jak 4 parametry (czyli 5 typu parametrów, w tym jeden dla wartości powrót):

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> 

Można zadeklarować własną rękę, oczywiście:

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

Jednak w W tym miejscu pomyślałbym bardzo dokładnie o tym, czy być może uda ci się zamknąć niektóre z tych parametrów razem. Czy są całkowicie niezwiązani?

+0

Ale nie ma powodu, dla którego nie moglibyście dodać własnych, ponieważ są po prostu delegatami z lekami generycznymi. – Samuel

+0

Rzeczywiście. Edytowanie ... –

+0

@Me: Dodaj własne z więcej niż 4 parametrami. – Samuel

3

Istnieją różne klasy zdefiniowane przez framework o nazwie Func, które pobierają od 1 do 5 parametrów. Musisz zdefiniować własną klasę, która zajmuje 6.

+0

Func definiuje tylko 4 parametry - ale 5 * typy *. –

10

FYI, kolejną wersję bibliotek .NET obejmie Func działania ogólne typy ponad czterech parametrów.