2009-04-15 20 views
2

イベントのパラメータタイプを取得する方法はありません。反射によるイベントパラメータの取得

たとえば、私はパラメータを取得するためにMethodInfoを使用することしかわかりませんが、私はEventInfoまたはFieldInfoのいずれかを持っています。私が欲しいもの

は、このから「ブール」を取得することができることです。

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

その方法はthis linkごとにnullを返しますので、(私は理論的にGetRaiseMethod(のようなものを試みることができる)が、それは動作しません。 )、それがあったとしても、最初にメソッドバインディングが必要になります。これは、イベントが初期化時に特定の型付きパラメータを持っていることを確認するテストスイートのためのものです。

アイデア?

答えて

11

イベントEventNameがクラスDeclaringClassで宣言され、イベントに少なくともパラメータがあると仮定すると、2番目のパラメータのタイプを次のように取得できます。それ以外の場合は、おそらく例外が発生します。

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

Danielソリューションを使用しようとしましたが、私のPCLでTypeInitializationException例外があります。

次のコードは私のために働き、より明確になります。

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