Mam zmiennej typu Func<dynamic>
i próbuję przypisać jej wartość. Gdybym przypisać go do metody, która zwraca typ wartości (np int
), pojawia się błądNie można przypisać metod, które zwracają typy wartości do Func <dynamic>
„int MethodName()” ma złą powrotną typ
Gdybym zawinąć metodę w wywołanie lambda, jednak działa dobrze. Również metody zwracające typy odniesienia wydają się działać dobrze.
private string Test()
{
return "";
}
private int Test2()
{
return 0;
}
Func<dynamic> f = Test; // Works
Func<dynamic> g = Test2; // Does not
Func<dynamic> h =() => Test2(); // Works
Co jest nie tak w przypadku bezpośredniego przypisania?
To nie jest po prostu "dynamiczny". Jeśli zmienisz 'Func' na 'Func
@MarcinJuraszek Ze specyfikacji dotyczącej zgodności uczestnika "Dla każdego parametru wartości (parametru bez modyfikatora ref lub out), konwersja tożsamości (§ 6.1.1) lub niejawna konwersja referencyjna (§6.1.6) istnieje z typu parametru w D do odpowiedniego typu parametru w M. " Istnieje niejawna konwersja w tym przypadku, ale nie jest to konwersja tożsamości lub odniesienia. – Servy