Por que o C # não pode inferir o tipo desse caso aparentemente simples e óbvio
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 _) { }
}
O compilador reclama queTest(A)
não consigo descobrirT
ser estarstring
.
Parece-me um caso bastante fácil, e juro que confiei em inferência muito mais complicada em outras funções genéricas de utilidade e extensão que escrevi. O que estou perdendo aqui
Atualização 1: Isso está no compilador C # 4.0. Descobri o problema no VS2010 e o exemplo acima é de uma reprodução de caso mais simples que fiz no LINQPad 4.
Atualização 2: Adicionamos mais alguns exemplos à lista do que funcion