Ich habe eine Variable vom Typ Func<dynamic>
und ich versuche, einen Wert zuzuweisen. Wenn ich es auf ein Verfahren zuweisen, die einen Wert Typ zurückgibt (zB int
), erhalte ich die FehlerKann keine Methoden zuweisen, die Werttypen zu Func zurückgeben <dynamic>
‚int Method()‘ hat den falschen Rückgabetyp
Wenn ich die Methode umwickeln Ein Lambda-Call funktioniert jedoch einwandfrei. Auch Methoden, die Referenztypen zurückgeben, scheinen zu funktionieren.
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
Was stimmt nicht mit dem Fall der direkten Zuweisung?
Es ist nicht nur 'dynamisch'. Wenn Sie Ihre 'Func' zu 'Func
@MarcinJuraszek Aus den Spezifikationen zur Delegiertenkompatibilität: "Für jeden Wertparameter (ein Parameter ohne Ref- oder Out-Modifikator) existiert eine Identitätskonvertierung (§6.1.1) oder eine implizite Referenzkonvertierung (§6.1.6) aus dem Parametertyp in D zu dem entsprechenden Parametertyp in M. In diesem Fall gibt es eine implizite Konvertierung, es handelt sich jedoch nicht um eine Identitäts- oder Referenzkonvertierung. – Servy