Получить параметры события через отражение

2

Я не могу понять, как получить типы параметров для события.

Например, я могу видеть только метод MethodInfo для получения параметров, но у меня есть либо EventInfo, либо поле FieldInfo.

Я хочу, чтобы у меня получилось "Boolean":

Public Event EventName(ByVal sender As Object, ByVal value As Boolean)

Я мог бы теоретически попробовать что-то вроде GetRaiseMethod(), но это не сработает (потому что этот метод возвращает null в соответствии с эта ссылка) и даже если бы это было сделано, это потребовало бы привязки метода сначала, и это предназначено для тестового набора, просто подтверждающего, что при инициализации событие имеет определенный типизированный параметр.

Любые идеи?

Теги:
reflection

2 ответа

11
Лучший ответ

Вы можете получить тип второго параметра следующим образом, если предположить, что событие EventName объявлено в классе DeclaringClass, и событие имеет по крайней мере параметры. Кроме того, вы, вероятно, получите исключение.

Type secondEventHandlerParameterType = 
   typeof(DeclaringClass).
   GetEvent("EventName").
   EventHandlerType.
   GetMethod("Invoke").
   GetParameters()[1].
   ParameterType;
0

Я попытался использовать решение Daniel, но получил исключение TypeInitializationException в моем PCL.

Следующий код работает для меня и выглядит более понятным:

Type secondEventHandlerParameterType = 
   typeof(DeclaringClass).
   GetEvent("EventName").
   EventHandlerType.
   GenericTypeArguments.
   First();
  • 0
    Это решение будет работать только в семействе типов делегатов Action <>. GenericTypeArguments являются аргументами типа для универсального типа делегата.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню