Wie zu testen, ob MethodInfo.ReturnType Art von System.Void ist?
-
10-07-2019 - |
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.
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 ...