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.

Était-ce utile?

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 ...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top