Ho una variabile di tipo Func<dynamic>
e sto cercando di assegnargli un valore. Se ho assegnarlo a un metodo che restituisce un tipo di valore (ad esempio int
), ottengo l'erroreImpossibile assegnare metodi che restituiscono tipi di valori a Func <dynamic>
'int MethodName()' ha il tipo di ritorno sbagliato
Se mi avvolgo il metodo in una chiamata lambda, tuttavia, funziona bene. Anche i metodi che restituiscono tipi di riferimento sembrano funzionare correttamente.
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
Cosa c'è che non va nel caso di assegnazione diretta?
Non è solo "dinamico". Se si modifica 'Func' a 'Func
@MarcinJuraszek Dalle specifiche sulla compatibilità dei delegati, "Per ciascun parametro di valore (un parametro senza alcun modificatore di rift o di out), una conversione di identità (§6.1.1) o una conversione di riferimento implicita (§6.1.6) esiste dal tipo di parametro in D al tipo di parametro corrispondente in M. " Esiste una conversione implicita in questo caso, ma non è un'identità o una conversione di riferimento. – Servy