Как проверить, является ли MethodInfo.ReturnType типом System.Void?

StackOverflow https://stackoverflow.com/questions/1820243

  •  10-07-2019
  •  | 
  •  

Вопрос

Используя отражение для получения MethodInfo, я хочу проверить, является ли возвращаемый тип типом System.Void.

Тестирование, если это System.Int32, работает нормально

 myMethodInfo.ReturnType == typeof(System.Int32)

но

 myMethodInfo.ReturnType == typeof(System.Void)

не компилируется?В настоящее время я проверяю, является ли строковое представление имени «System.Void», что кажется очень неправильным.

Это было полезно?

Решение

Вы не можете использовать System.Void напрямую, но может получить к нему доступ, используя typeof(void).

Некоторые отмечают(здесь и в комментариях здесь например), что причина этого в том, что Стандарт ECMA 335, Раздел II, раздел 9.4 гласит:

Следующие виды типа нельзя использовать в качестве аргументов в экземплярах (общих типов или методов):

  • Типы Byref (например, System.Generic.Collection.List 1<string&>является недействительным)
  • Типы значений, которые содержат поля, которые могут указывать на стек оценки CIL (например,List<System.RuntimeArgumentHandle>)
  • пустота (например, List<System.Void> является недействительным)

Другие советы

Когда я создаю это, я получаю ошибку:

System.Void нельзя использовать из C# — используйте typeof(void) для получения объекта типа void.

Кажется, это и есть ответ...

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top