c# - ¿Cómo probar si MethodInfo.ReturnType es un tipo de System.Void?
reflection (2)
Cuando construyo esto, obtengo el error:
System.Void no se puede usar desde C # - use typeof (void) para obtener el objeto de tipo void
Parece que esa es la respuesta ...
Usando la reflexión para obtener un MethodInfo, quiero probar si el tipo devuelto es typeof System.Void.
Probando si es System.Int32 funciona bien
myMethodInfo.ReturnType == typeof(System.Int32)
pero
myMethodInfo.ReturnType == typeof(System.Void)
no compila? En este momento estoy probando si la representación de la cadena del nombre es "System.Void", que parece muy incorrecta.
No puede usar System.Void
directamente, pero puede acceder a él usando typeof(void)
.
Varias personas señalan ( here y en los comentarios here por ejemplo) que la razón para esto es que el estándar ECMA 335 , Partición II, sección 9.4 dice:
Los siguientes tipos de tipos no se pueden usar como argumentos en instancias (de tipos genéricos o métodos):
- Tipos de Byref (por ejemplo,
System.Generic.Collection.List 1<string&>
no es válido)- Tipos de valores que contienen campos que pueden apuntar a la pila de evaluación CIL (p. Ej.,
List<System.RuntimeArgumentHandle>
)- void (p. ej.,
List<System.Void>
no es válido)