Warum werden von MethodInfo.Invoke Exceptions in eine TargetInvocationException umbrochen?

8

Ich frage das eher aus Neugier als aufgrund eines wirklichen Wissensbedürfnisses, aber ich kann mir keine guten Gründe dafür vorstellen, dass MethodInfo.Invoke seine Ausnahmen umschließt.

Würde man sie auslassen lassen, wäre es ein kleines bisschen einfacher, solche Ausnahmen in Visual Studio zu debuggen - ich müsste VS nicht auffordern, bei der ersten Chance zu stoppen, um den aktuellen Zustand an der Quelle der Ausnahme zu sehen. Der Stack-Trace würde vermutlich direkt nach dem Aufruf von Invoke [external code] anzeigen, aber so was.

Fehle ich eine wichtige Funktion, die dieses Wrapping bietet, die nicht möglich wäre, hätte Invoke die Exceptions als unwrapped übergeben?

    
Roman Starkov 03.03.2010, 12:04
quelle

2 Antworten

9
  

Vermisse ich eine wichtige Funktion?   dass diese Verpackung das bietet   nicht möglich sein hatte Invoke lassen   Ausnahmen übergeben ausgepackt?

Ja. Ein Argument besteht darin, zwischen dem Ausnahme-throw-Verfahren und der vom Reflektionsmechanismus selbst ausgelösten Ausnahme unterscheiden zu können. Ex. Der ArgumentException kann aus dem Reflektionsmechanismus oder der Zielmethode geworfen werden - dies sind zwei verschiedene Meta-Level.

Ein weiteres Argument ist der Vertrag der invoke -Methode selbst . In Java darf die Methode invoke nur die in der Methodensignatur deklarierte Ausnahme auslösen. Eine willkürliche Ausnahme würde der Signatur einfach nicht folgen und muss dann eingepackt werden. Dieses Argument gilt nicht für C # wie es ist, ist aber immer noch gültig. Die invoke -Methode hat einen Vertrag, der in dem Dokument definiert ist, auf den Sie sich nicht verlassen konnten, wenn die Zielausnahme so geworfen wurde, wie sie ist.

    
ewernli 03.03.2010, 12:58
quelle
-1

Wenn es eine Situation gibt, in der die TargetInvocationException ausgelöst werden kann, ohne dass die Methode "throwing and exception" aufgerufen wird, ist dies sinnvoll. Ich bin mir nicht sicher, ob es einen solchen Fall gibt.

    
Slavo 03.03.2010 12:42
quelle

Tags und Links