Come verificare se MethodInfo.ReturnType è il tipo di System.Void?
-
10-07-2019 - |
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.
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 ...