2009-04-08 9 views
5

¿Por qué esta compilación:Diccionarios y divertido Lambdas

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

pero no este otro con un parámetro adicional en la Func (booleano):

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

O yo estoy ciego o hay algo más que voy a aprender hoy: D

+0

Por cierto, el error para la segunda línea es: "Usar el tipo genérico 'System.Func ' requiere '2' tipos de argumentos" – antonioh

+3

BTW, la palabra clave 'var' es su nuevo amigo. Consulte http://msdn.microsoft.com/en-us/library/bb383973.aspx y http://stackoverflow.com/questions/9033#9035. – lacop

+0

definitivamente mucho mejor que escribir todo eso dos veces! – antonioh

Respuesta

18

No existe tal cosa como Func<T1,T2,T3,T4,T5,TResult>. Sólo se va tan lejos como 4 parámetros (es decir, 5 tipo parámetros, incluyendo una para el valor de retorno):

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> 

Se puede declarar su cuenta, por supuesto:

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

Sin embargo, en en ese punto, pensaría muy cuidadosamente si podrías encapsular algunos de esos parámetros juntos. ¿Están completamente sin relación?

+0

Pero no hay ninguna razón por la que no puedas agregar la tuya, ya que solo son delegados con genéricos. – Samuel

+0

De hecho. Editando ... –

+0

@Me: Agregue el suyo con más de 4 parámetros. – Samuel

3

Existen diferentes clases definidas por el marco denominado Func que toman de 1 a 5 parámetros. Necesitaría definir su propia clase que requiera 6.

+0

Func solo define hasta 4 parámetros, pero 5 * escribe * parámetros. –

10

FYI, la próxima versión de las librerías .NET incluirá Func y Acción tipos genéricos de más de cuatro parámetros.