Dlaczego następuje nie wnioskować R
:Rodzaj wnioskowanie nie tajemniczo
static R Foo<R>(Func<Action<R>, R> call) { ... }
Chociaż dość dużo 'sam', działa:
static R Foo<R>(Func<Action, R> call) { ... }
wykorzystania:
var i = Foo(ec => -1);
Ways pierwsza próbka "musi" być wywołana do kompilacji:
var i = Foo<int>(ec => -1);
- lub -
var i = Foo((Action<int> ec) => -1);
myśli: Jak można zobaczyć na drugim fragmentem, R
jest już określone przez rodzaj powrotnego „lambda”. Dlaczego to samo dotyczy pierwszego? Nawet przy użyciu ec
(która powinna być inną wskazówką kompilatora), nie można wnioskować.
W twoim przykładzie "ec" można zamienić na delegata, który przyjmuje 'int' i zwraca' void'? –
W pierwszym przykładzie tak. – leppie
Reguły wnioskowania o typie w języku C# są wprowadzane w celu uwzględnienia podstawowych przypadków. Istnieją rzadkie przypadki, w których reguły (celowo) nie "biorą". – usr