Frage

Mit Reflexion eine Methodinfo zu erhalten, möchte ich testen, ob der zurückgegebene Typ typeof ist System.Void.

Test, wenn es System.Int32 funktioniert

 myMethodInfo.ReturnType == typeof(System.Int32)

und

 myMethodInfo.ReturnType == typeof(System.Void)

lässt sich nicht kompilieren? Derzeit Im Test wenn die Stringdarstellung des Namens ist „System.Void“, die sehr falsch zu sein scheint.

War es hilfreich?

Lösung

Sie können nicht verwenden System.Void direkt, sondern können Zugriff es typeof(void) verwenden.

Mehrere Menschen weisen darauf hin ( hier und in den Kommentaren hier zum Beispiel), dass der Grund dafür ist, dass die ECMA-Standard 335 , Partition II, Abschnitt 9.4 sagt:

  

Die folgenden Arten von Typ kann nicht sein,   als Argumente in Instanziierungen verwendet   (Von generischen Typen oder Methoden):

     
      
  • ByRef Typen (zum Beispiel System.Generic.Collection.List 1<string&>   ist ungültig)
  •   
  • Werttypen, die Felder enthalten, die in die CIL zeigen kann   Auswertungsstapel (z.B. List<System.RuntimeArgumentHandle>)
  •   
  • void (zum Beispiel List<System.Void> ist ungültig)
  •   

Andere Tipps

Als ich das bauen, erhalte ich die Fehlermeldung:

  

System.Void kann nicht von C # verwendet werden - verwenden typeof (void) das Leeren Typ-Objekt zu erhalten

Klingt wie, dass die Antwort ist ...

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top