Como testar se MethodInfo.ReturnType é tipo de System.Void?
-
10-07-2019 - |
Pergunta
Usando reflexão para obter um MethodInfo, eu quero testar se o tipo retornado é typeof System.Void.
Os testes se for System.Int32 funciona bem
myMethodInfo.ReturnType == typeof(System.Int32)
e
myMethodInfo.ReturnType == typeof(System.Void)
não compila? No momento estou testando se a representação de string do nome é "System.Void", que parece muito errado.
Solução
Você não pode usar System.Void
diretamente, mas lata acessá-lo usando typeof(void)
.
Várias pessoas apontar ( aqui e nos comentários aqui por exemplo) que a razão para isso é que o ECMA padrão 335 , Partition II, secção 9.4 diz:
Os seguintes tipos de tipo não pode ser usados ??como argumentos em instantiations (De tipos genéricos ou métodos):
- tipos ByRef (por exemplo,
System.Generic.Collection.List 1<string&>
é inválido)- Tipos de valor que contêm campos que podem apontar para o CIL pilha de avaliação (por exemplo,
List<System.RuntimeArgumentHandle>
)- void (por exemplo,
List<System.Void>
é inválido)
Outras dicas
Quando eu construir isto, eu recebo o erro:
System.Void não pode ser usado a partir de C # - uso typeof (void) para obter o objeto tipo void
Parece que essa é a resposta ...