2011-11-22 12 views
5

desconcertado.¿Por qué no se compila este código C# cuando se usan parámetros con nombre?

class Test 
{ 
    void Main() 
    { 
     F(() => "");    // ok 
     F(named:() => "");   // 'T' cannot be inferred from the usage! 
     F<string>(() => "");  // ok 
     F<string>(named:() => ""); // ok 
    } 

    void F<T>(Func<T> named) { } 
} 

¿Podría alguien decirme por qué la segunda llamada a F no compila?

(Tenga en cuenta que este es un ejemplo significativamente despojado, por lo que parece sintético. En el caso real que encontré, hay algunos parámetros predeterminados antes de 'named' y así se requiere el parámetro named. Y entonces, aparentemente es una especificación explícita de 'T' por la persona que llama.)

+1

parece una insuficiencia en la inferencia del tipo de delegado del compilador. – Jeff

+0

Suena probable. Y si haces ese comentario en una respuesta, lo aceptaré. – scobi

Respuesta

1

Parece una insuficiencia en la inferencia del tipo de delegado del compilador ... lo siento, no puedo ofrecer más.

+0

¿Por qué el voto a favor? Nadie más se preocupó por responder y el autor declaró "Suena probable. Y si hace ese comentario en una respuesta, lo aceptaré". – Jeff

+0

Bueno, al menos podría volver a 0 con mi voto, je. – scobi

Cuestiones relacionadas