Kann keine Methoden zuweisen, die Werttypen an Funcdynamic zurückgeben [duplizieren]

8

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?

    
Kris Harper 05.11.2015, 19:29
quelle

1 Antwort

4

Dies hat nichts mit dynamic oder delegate TResult Func<out TResult>() zu tun. Sie werden das gleiche Verhalten in diesem Code sehen:

%Vor%

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.

    
Timothy Shields 05.11.2015, 19:47
quelle

Tags und Links