Я не могу понять, как получить типы параметров для события.
Например, я могу видеть только метод MethodInfo для получения параметров, но у меня есть либо EventInfo, либо поле FieldInfo.
Я хочу, чтобы у меня получилось "Boolean":
Public Event EventName(ByVal sender As Object, ByVal value As Boolean)
Я мог бы теоретически попробовать что-то вроде GetRaiseMethod(), но это не сработает (потому что этот метод возвращает null в соответствии с эта ссылка) и даже если бы это было сделано, это потребовало бы привязки метода сначала, и это предназначено для тестового набора, просто подтверждающего, что при инициализации событие имеет определенный типизированный параметр.
Любые идеи?
Вы можете получить тип второго параметра следующим образом, если предположить, что событие EventName
объявлено в классе DeclaringClass
, и событие имеет по крайней мере параметры. Кроме того, вы, вероятно, получите исключение.
Type secondEventHandlerParameterType =
typeof(DeclaringClass).
GetEvent("EventName").
EventHandlerType.
GetMethod("Invoke").
GetParameters()[1].
ParameterType;
Я попытался использовать решение Daniel, но получил исключение TypeInitializationException
в моем PCL.
Следующий код работает для меня и выглядит более понятным:
Type secondEventHandlerParameterType =
typeof(DeclaringClass).
GetEvent("EventName").
EventHandlerType.
GenericTypeArguments.
First();