Comment tester si MethodInfo.ReturnType est le type de System.Void?

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 …