2009-04-15 13 views
2

Ich kann nicht herausfinden, wie man die Parametertypen für ein Ereignis erhält.Erhalte Ereignisparameter über Reflexion

Zum Beispiel kann ich nur sehen, eine MethodInfo zu verwenden, um Parameter zu erhalten, aber ich habe entweder eine EventInfo oder eine FieldInfo.

Was ich will, ist in der Lage sein ‚Boolean‘ zu bekommen von dieser:

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

ich theoretisch so etwas wie GetRaiseMethod versuchen könnte(), aber das wird nicht funktionieren (da diese Methode null zurück nach this link) und selbst wenn dies der Fall wäre, würde es eine Methode erfordern, die zuerst bindet, und dies soll für eine Testsuite sein, die gerade bestätigt, dass das Ereignis einen bestimmten typisierten Parameter bei der Initialisierung aufweist.

Irgendwelche Ideen?

Antwort

11

Sie können den Typ des zweiten Parameters wie folgt erhalten, unter der Annahme, dass das Ereignis EventName in der Klasse DeclaringClass deklariert ist und das Ereignis mindestens über Parameter verfügt. Andernfalls erhalten Sie wahrscheinlich eine Ausnahme.

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

Ich habe versucht, Daniel-Lösung zu verwenden, aber habe die TypeInitializationException Ausnahme in meinem PCL.

Der folgende Code funktioniert für mich und sieht mehr klar:

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