Ich habe eine Variable vom Typ Func<dynamic>
und versuche, ihr einen Wert zuzuweisen. Wenn ich es einer Methode zuweise, die einen Werttyp zurückgibt (z. B. int
), erhalte ich den Fehler
'int MethodName ()' hat den falschen Rückgabetyp
Wenn ich die Methode jedoch in einen Lambda-Aufruf einpacke, funktioniert das problemlos. Auch Methoden, die Referenztypen zurückgeben, scheinen gut zu funktionieren.
%Vor%Was stimmt nicht mit dem Fall der direkten Zuweisung?
Dies hat nichts mit dynamic
oder delegate TResult Func<out TResult>()
zu tun. Sie werden das gleiche Verhalten in diesem Code sehen:
Aus irgendeinem Grund werden Werttypen wie int
automatisch in object
oder dynamic
umgewandelt, aber I<int>
wird nicht automatisch in I<object>
oder I<dynamic>
umgewandelt. Ich kann nicht finden, wo in der Sprachreferenz das angegeben wird.
Der Grund dafür, dass Func<dynamic> h = () => Test2();
in Ihrem Code funktioniert, ist, dass int
nur implizit in dynamic
umgewandelt werden muss, was in Ordnung ist. Es ist nicht erforderlich, dass Func<int>
implizit auf Func<dynamic>
umsetzt.