我无法弄清楚如何获取事件的参数类型。
例如,我只能看到使用MethodInfo来获取参数,但我有一个EventInfo或FieldInfo。
我想要的是能够从中得到'布尔':
Public Event EventName(ByVal sender As Object, ByVal value As Boolean)
理论上我可以尝试类似GetRaiseMethod()的东西,但这不起作用(因为该方法按照this link返回null),即使它确实如此,也需要首先进行方法绑定,这意味着对于测试套件,只是确认事件在初始化时具有某个类型参数。
有什么想法吗?
答案 0 :(得分:12)
假设事件EventName
在类DeclaringClass
中声明且事件至少包含参数,则可以获取第二个参数的类型,如下所示。否则你可能会收到一个例外。
Type secondEventHandlerParameterType =
typeof(DeclaringClass).
GetEvent("EventName").
EventHandlerType.
GetMethod("Invoke").
GetParameters()[1].
ParameterType;
答案 1 :(得分:0)
我尝试使用Daniel解决方案,但在我的PCL中获得TypeInitializationException
例外。
以下代码对我有用,看起来更清晰:
Type secondEventHandlerParameterType =
typeof(DeclaringClass).
GetEvent("EventName").
EventHandlerType.
GenericTypeArguments.
First();