Wie setzen InnerException an .NET Exception-Objekt
Wie kann ich die InnerException
Eigenschaft eines Exception
Objekt, während ich in den Konstruktor des Objekts? Dies läuft darauf hinaus, die Suche und Einstellung der Feld sichern einer Immobilie, die keine setter.
BTW: ich habe gesehen, diese evain.net - Erste das Feld sichern eine Eigenschaft mit der Spiegelung aber suchen, nicht IL-basierten Lösung, wenn möglich.
Den Konstruktor von Exception
ist der Ort, wo die Exception
Typs erstellt, so dass ich nicht aufrufen kann, es mithilfe der Basis-Konstruktor der Klasse MyException() :base(...)
etc.
- Re der follow-up; dann (wie ich erwähnte) die Art der Schöpfung, in der eine statische Methode vor dem Tor, statt innen der Konstruktor Körper.
- Macht mehr Sinn, sich einkapseln in meinem Fall.
- ..., aber ich nehmen Sie Ihren Punkt, ich werde sehen, was sich machen dies zu einem Werk zu vermeiden, die Reflexion Kosten.
- (fwiw, ich habe nicht gesagt, Fabrik, Blick in die Beispiel - können Sie eine statische Methode, um Arbeit zu tun, nur vor der Basis-ctor, in der call-to-base; Sie setzen Ihre Arbeit hier, und presto)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Warum können Sie nicht einfach den Konstruktor aufrufen unter die InnerException als parameter? Wenn aus irgendeinem Grund ist es nicht möglich, das Feld sichern im System.Ausnahme:
Fand ich es mit Redgate ' Reflektor. Mit der spiegelung ich nehme an, man könnte die innere Ausnahme.
Edit: In den meisten Fällen ist es nicht eine gute Idee, um Zugriff auf private Felder per reflection, aber ich weiß nicht genug über NT ' s Fall, um sicher zu wissen, ob es eine gute oder schlechte Idee ist.
Legen Sie die innere exception durch den Aufruf der Basis-ctor:
Wenn Sie benötigen, um ausführen von code, um die Ausnahme, die die Verwendung einer statischen Methode:
Den
Exception
Klasse hat einen überladenen Konstruktor akzeptieren die innere Ausnahme, die als parameter:Ist es das, was du suchst?
wäre normal von der Praxis angenommen, Sie haben sich gefangen, eine Ausnahme, die Sie hinzufügen möchten, mehr Informationen, bevor sprudeln.
Wenn ich verstehe Ihre Frage, die Sie wollen, so etwas zu tun:
Wenn Sie im Konstruktor ein Objekt erbt von Exception, die Sie verwenden würden
this
anstelle des erstenex
.Aber dies möglicherweise nicht der beste Weg, damit umzugehen, was immer es ist Sie versuchen, zu behandeln.
Nicht
InnerException
soll festgelegt werden, wenn dieException(string, Exception)
Konstruktor? Ich denke, es ist von design, die Sie nicht ändern können diese nicht anders, aber Sie können immer zu verzögern, bis die entsprechenden Konstruktor bei der Konstruktion Zeit:Ich denke, Sie sollten nicht immer brechen die Ausnahme Kette in Ihrem code, da das in der Regel zu einem Fehler führt, werden Sie nie wieder finden.
Verwenden Redgate ' Reflektor zu finden, das Feld. Ich bezweifle, dass die Ausnahme die Durchführung jemals ändern wird... Aber es ist ein Risiko!
Ich weiß ich bin wirklich spät zur party, aber ich finde, dass das funktioniert.
Der trick ist, um die tatsächliche
Exception
Typ_innerException
Feld, und legen Sie dann die innere Ausnahme-Wert auf den Klassen-Instanz (MyException
in diesem Fall).Dies funktioniert auch für Variablen.
In meiner situation, die ich verwendet diesen code:
HTH jemand ;).