2009-04-15 102 views
2

我無法弄清楚如何獲取事件的參數類型。通過反射獲取事件參數

例如,我只能看到使用MethodInfo來獲取參數,但我有一個EventInfo或FieldInfo。

我想要的是能夠從這個獲得「布爾」:

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

我理論上可以嘗試像GetRaiseMethod(),但將無法正常工作(因爲該方法返回null按照this link ),即使它需要首先綁定一個方法,並且這意味着要用於測試套件,只需確認該事件在初始化時具有某種類型的參數即可。

任何想法?

回答

11

假設在類DeclaringClass中聲明事件EventName,並且該事件至少包含參數,您可以獲得第二個參數的類型,如下所示。否則你可能會收到異常。

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

我試圖使用丹尼爾解決方案,但在我的PCL中得到TypeInitializationException異常。

下面的代碼對我的作品,看起來更加清晰:

Type secondEventHandlerParameterType = 
    typeof(DeclaringClass). 
    GetEvent("EventName"). 
    EventHandlerType. 
    GenericTypeArguments. 
    First();