Ich schreibe einige Methoden, wo es einen Code-Pfad gibt, der niemals passieren sollte. Hier ist ein vereinfachtes Beispiel:
%Vor%Die Ausnahme, die hier am sinnvollsten ist, ist etwa
%Vor% Weil das passiert, wenn wir das Ende der for-Schleife erreichen. Leider scheint der Compiler mit der oben beschriebenen Methode nicht schlau genug zu sein, um herauszufinden, dass der Code nach der for-Schleife niemals passieren sollte. Sie können also nicht einfach nichts haben, oder der Compiler wird sich beschweren, dass "nicht alle Code-Pfade einen Wert zurückgeben". Ja, ich könnte return double.NaN
nach der Schleife zusätzlich davor einfügen. Aber das würde die Ursache des Problems verschleiern.
Meine Frage ist - gibt es eine Ausnahme, die angemessen wäre?
Ich benutze dafür die InvalidOperationException
-Klasse . Es bedeutet, dass die Anwendung einen Zustand erreicht hat, in dem sie nicht sein sollte.
Sie können auch Debug.Assert
, dass etwas wahr ist, oder einfach Debug.Fail
, wenn die Ausführung einen bestimmten Punkt erreicht.
Aber das Debuggen von Asserts / Fails funktioniert nicht im Release-Modus, nur wenn die Bedingung DEBUG
definiert ist. Hängt von Ihren Anforderungen ab, ob das wünschenswert ist.
Wie @AlexD weist richtig darauf hin , es gibt auch die Trace
-Klasse mit dem entsprechenden Assert
und Fail
Methoden, die zur Laufzeit funktionieren, um Probleme zu isolieren und zu beheben, ohne ein laufendes System zu stören , wenn die Bedingung TRACE
definiert ist (wird standardmäßig auf der Registerkarte Projekteigenschaften erstellen festgelegt).
Übrigens, um die Frage im Titel zu beantworten: Sie können Ihre eigenen Ausnahmen erstellen, wenn Sie möchten.
%Vor%Und wirf es auf Leute.
%Vor%Werfen Sie keine neue Exception (), es verursacht Probleme für Code, der versucht, Ausnahmen abzufangen. Die generische, spezifische Ausnahme, die Sie verwenden können, ist:
%Vor%Dies setzt voraus, dass der Fehler in der Produktion auftreten soll, vorausgesetzt, ein Fehler ist besser als das Starten von Raketen und das Beenden der Welt. Andere Entwickler würden lieber eine Methode verwenden, die annimmt, dass die Invariante in der Produktion ignoriert werden kann, aber nicht zur Entwicklungszeit, und es ist uns egal, ob wir die Welt beenden oder nicht.
Es scheint einfach zu sein, eine benutzerdefinierte Ausnahme dann
Einfach! Verwenden Sie das Code-Snippet!
Ausnahme + TAB + TAB
Und es wird eine neue Ausnahme für Sie erstellen. Dieses Snippet erzeugt dies.
%Vor%Sie müssen nur den Namen ändern und .. fertig! ;)