Szukałem trochę informacji na temat wnioskowania o typie, ale nie mogę zastosować żadnego z rozwiązań mojego konkretnego problemu.Powiązanie typów w zagnieżdżonych funkcjach ogólnych
Dużo pracuję nad budowaniem i przekazywaniem funkcji. Wydaje mi się, że powinien być w stanie wywnioskować typ int. Jedyne, co mogę myśleć to to, że typ zwracany przez lambdę nie jest sprawdzany przez algorytm wnioskowania typu. Usunąłem niepotrzebną logikę, aby wyraźniej pokazać tę kwestię.
Func<T> Test<T>(Func<Func<T>> func)
{
return func();
}
to kompiluje:
Func<int> x = Test<int>(() =>
{
int i = 0;
return() => i;
});
ale daje to błąd „Argumenty typu dla metody nie można wywieść z wykorzystaniem Spróbuj określając argumenty typu jawnie.”:
Func<int> x = Test(() =>
{
int i = 0;
return() => i;
});
Chyba chciałbym tylko wiedzieć, dlaczego działa w ten sposób i jakimi sposobami obejść.
bardzo podobne pytanie, ale nie do końca takie same http://stackoverflow.com/questions/6090159/inferring-generic-types-with-functional-composition –