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.)
parece una insuficiencia en la inferencia del tipo de delegado del compilador. – Jeff
Suena probable. Y si haces ese comentario en una respuesta, lo aceptaré. – scobi