Domanda

Usando reflection per ottenere un MethodInfo, voglio verificare se il tipo restituito è typeof System.Void.

Verifica se System.Int32 funziona correttamente

 myMethodInfo.ReturnType == typeof(System.Int32)

ma

 myMethodInfo.ReturnType == typeof(System.Void)

non si compila? Attualmente sto testando se la rappresentazione in stringa del nome è & Quot; System.Void & Quot; che sembra molto sbagliato.

È stato utile?

Soluzione

Non puoi utilizzare System.Void direttamente, ma puoi accedervi utilizzando typeof(void).

Diverse persone sottolineano ( qui e nei commenti qui per esempio) che la ragione di ciò è che Standard ECMA 335 , Partizione II, la sezione 9.4 dice:

  

I seguenti tipi di tipo non possono essere   usato come argomento nelle istanze   (di tipi o metodi generici):

     
      
  • Tipi di riferimenti secondari (ad es. System.Generic.Collection.List 1<string&>   non è valido)
  •   
  • Tipi di valore che contengono campi che possono puntare al CIL   stack di valutazione (ad es. List<System.RuntimeArgumentHandle>)
  •   
  • vuoto (ad es. List<System.Void> non valido)
  •   

Altri suggerimenti

Quando creo questo, ottengo l'errore:

  

System.Void non può essere usato da C # - usa typeof (void) per ottenere l'oggetto di tipo void

Sembra che sia la risposta ...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top