Por qué C # no puede inferir el tipo de este caso aparentemente simple y obvio
Dado este código:
class C
{
C()
{
Test<string>(A); // fine
Test((string a) => {}); // fine
Test((Action<string>)A); // fine
Test(A); // type arguments cannot be inferred from usage!
}
static void Test<T>(Action<T> a) { }
void A(string _) { }
}
El compilador se queja de queTest(A)
no puede entenderT
serstring
.
Esto me parece un caso bastante fácil, y juro que he confiado una inferencia mucho más complicada en otras funciones genéricas de utilidad y extensión que he escrito. ¿Que me estoy perdiendo aqui
Actualización 1: Esto está en el compilador C # 4.0. Descubrí el problema en VS2010 y la muestra anterior es de una reproducción de caso más simple que hice en LINQPad 4.
Actualización 2: se agregaron algunos ejemplos más a la lista de lo que funciona.