Получить параметры события через отражение - PullRequest
2 голосов
/ 15 апреля 2009

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

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

То, что я хочу, это иметь возможность получить 'Boolean' из этого:

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

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

Есть идеи?

Ответы [ 2 ]

12 голосов
/ 15 апреля 2009

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

Type secondEventHandlerParameterType = 
   typeof(DeclaringClass).
   GetEvent("EventName").
   EventHandlerType.
   GetMethod("Invoke").
   GetParameters()[1].
   ParameterType;
0 голосов
/ 03 августа 2016

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

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

Type secondEventHandlerParameterType = 
   typeof(DeclaringClass).
   GetEvent("EventName").
   EventHandlerType.
   GenericTypeArguments.
   First();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...