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.

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top