¿Cómo probar si MethodInfo.ReturnType es un tipo de System.Void?
-
10-07-2019 - |
Pregunta
Utilizando la reflexión para obtener un MethodInfo, quiero probar si el tipo devuelto es typeof System.Void.
Prueba si es System.Int32 funciona bien
myMethodInfo.ReturnType == typeof(System.Int32)
pero
myMethodInfo.ReturnType == typeof(System.Void)
no se compila? Actualmente estoy probando si la representación de cadena del nombre es & Quot; System.Void & Quot; lo que parece muy mal.
Solución
No puede usar System.Void
directamente, pero puede acceder usando typeof(void)
.
Varias personas señalan ( aquí y en los comentarios aquí por ejemplo) que la razón de esto es que Norma 335 de ECMA , Partición II, sección 9.4 dice:
Los siguientes tipos de tipos no pueden ser utilizado como argumentos en instancias (de tipos o métodos genéricos):
- Tipos de byref (p. ej.,
System.Generic.Collection.List 1<string&>
es inválido)- Tipos de valor que contienen campos que pueden apuntar a CIL pila de evaluación (por ejemplo,
List<System.RuntimeArgumentHandle>
)- nulo (por ejemplo,
List<System.Void>
no es válido)
Otros consejos
Cuando construyo esto, aparece 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 ...