En utilisant la reflection pour obtenir un MethodInfo, je veux tester si le type renvoyé est typeof System.Void.
Tester si c’est System.Int32 fonctionne bien
myMethodInfo.ReturnType == typeof(System.Int32)
mais
myMethodInfo.ReturnType == typeof(System.Void)
ne comstack pas? À l’heure actuelle, je teste si la représentation sous forme de chaîne du nom est “System.Void”, ce qui semble très faux.
Vous ne pouvez pas utiliser directement System.Void
, mais vous pouvez y accéder en utilisant typeof(void)
.
Plusieurs personnes soulignent ( ici et dans les commentaires ici par exemple) que la raison en est que la norme ECMA 335 , Partition II, section 9.4 dit:
Les types de types suivants ne peuvent pas être utilisés comme arguments dans les instanciations (de types ou de méthodes génériques):
- Types de références (par exemple,
System.Generic.Collection.List 1
n’est pas valide)- Types de valeur contenant des champs pouvant pointer dans la stack d’évaluation CIL (par exemple,
List
)- void (par exemple,
List
n’est pas valide)
Quand je construis ceci, j’obtiens l’erreur:
System.Void ne peut pas être utilisé à partir de C # – utilisez typeof (void) pour obtenir l’object de type void
On dirait que c’est la réponse …