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?
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.
Tags und Links .net reflection