Comment tester si MethodInfo.ReturnType est le type de System.Void?
-
10-07-2019 - |
Question
À l'aide de la réflexion pour obtenir un MethodInfo, je souhaite 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 compile pas? Actuellement, je teste si la représentation sous forme de chaîne du nom est & "System.Void &"; qui semble très faux.
La solution
Vous ne pouvez pas utiliser System.Void
directement, mais peut y accéder avec typeof(void)
.
Plusieurs personnes soulignent ( ici et dans les commentaires ici par exemple) parce que la raison en est que le Norme ECMA 335 , Partition II, section 9.4 dit:
Les types de types suivants ne peuvent pas être utilisé comme argument dans les instanciations (de types ou méthodes génériques):
- Types Byref (par exemple,
System.Generic.Collection.List 1<string&>
est invalide)- Types de valeur contenant des champs pouvant pointer vers le CIL pile d'évaluation (par exemple,
List<System.RuntimeArgumentHandle>
)- void (par exemple,
List<System.Void>
n'est pas valide)
Autres conseils
Lorsque je construis cela, j'obtiens le message d'erreur suivant:
System.Void ne peut pas être utilisé à partir de C # - utilisez typeof (void) pour obtenir l'objet de type void
On dirait que c'est la réponse ...