Ich habe viele Artikel (und einige ähnliche Fragen, die auf StackOverflow veröffentlicht wurden) darüber gelesen, wie und wann Behauptungen verwendet werden sollen, und ich habe sie gut verstanden. Trotzdem verstehe ich nicht, welche Art von Motivation mich antreiben sollte, Debug.Assert
anstatt eine einfache Ausnahme zu machen. Was ich damit meine, ist, dass in .NET die Standardantwort auf eine fehlgeschlagene Behauptung darin besteht, "die Welt anzuhalten" und dem Benutzer ein Meldungsfeld anzuzeigen. Obwohl diese Art von Verhalten geändert werden könnte, finde ich es sehr ärgerlich und überflüssig, dies zu tun, während ich stattdessen einfach eine geeignete Ausnahme auslösen könnte. Auf diese Weise könnte ich den Fehler leicht in das Protokoll der Anwendung schreiben, bevor ich die Ausnahme auslöse, und außerdem friert meine Anwendung nicht unbedingt ein.
Warum sollte ich also, wenn überhaupt, Debug.Assert
anstelle einer einfachen Ausnahme verwenden? Wenn Sie eine Behauptung dort platzieren, wo sie nicht sein sollte, kann dies zu allen Arten von "unerwünschtem Verhalten" führen. Aus meiner Sicht erhalte ich also wirklich nichts, wenn ich eine Behauptung verwende, anstatt eine Ausnahme auszulösen. Stimmen Sie mir zu oder fehlt mir hier etwas?
Hinweis: Ich verstehe voll und ganz, was der Unterschied "in der Theorie" ist (Debug vs. Release, Verwendungsmuster usw.), aber aus meiner Sicht ist es besser, eine Ausnahme auszulösen, als eine Bestätigung durchzuführen. Wenn ein Fehler in einer Produktionsversion entdeckt wird, möchte ich trotzdem, dass die "Behauptung" fehlschlägt (schließlich ist der "Overhead" lächerlich gering), daher ist es besser, stattdessen eine Ausnahme auszulösen.
Bearbeiten: So wie ich es sehe, bedeutet eine fehlgeschlagene Bestätigung, dass die Anwendung in einen beschädigten, unerwarteten Zustand übergegangen ist. Warum sollte ich die Ausführung fortsetzen wollen? Es spielt keine Rolle, ob die Anwendung auf einer Debug- oder Release-Version ausgeführt wird. Das gleiche gilt für beide