Mam następujący kod:C# wywnioskować typ rodzajowy na podstawie przechodzącą delegata
public static class X
{
public static C Test<A,B,C>(this A a, Func<B,C> f)
where C:class
{
return null;
}
}
public class Bar
{
public Bar()
{
this.Test(foo); //this doesn't compile
this.Test((Func<int, string>)foo);
this.Test((int q) => "xxx");
}
string foo(int a) { return ""; }
}
Dlaczego nie zaznaczonej linii skompilować? Czy ma to jakiś związek z typem zwrotu, który nie jest częścią podpisu?
Ale trzecia linia ma skompilować, co sprawia, że zgadnę kompilator zamienia ją w coś podobnego do drugiej linii ...
możliwy duplikat wnioskowania ogólnego typu [C# 3.0 - przekazanie delegata jako parametru funkcji] (http://stackoverflow.com/questions/407983/c-3-0-generic-type-inference-passinga-a- deleguj jako parametr funkcji) Przeczytaj te odpowiedzi, a oni podadzą szczegółowe wyjaśnienie. –