アサーションをいつどのように使用するかについて、たくさんの記事(およびStackOverflowに投稿された他のいくつかの同様の質問)を読み、それらをよく理解しました。Debug.Assert
しかし、それでも、単純な例外をスローする代わりに、どのような動機が私を使用するように駆り立てるべきかはわかりません。つまり、.NETでは、失敗したアサーションに対するデフォルトの応答は、「ワールドを停止」してユーザーにメッセージボックスを表示することです。この種の動作は変更できますが、それを行うのは非常に面倒で冗長であることがわかります。代わりに、適切な例外をスローすることもできます。このようにして、例外をスローする直前にアプリケーションのログにエラーを簡単に書き込むことができます。さらに、アプリケーションが必ずしもフリーズするわけではありません。
Debug.Assert
では、単純な例外の代わりに使用する必要があるのはなぜですか?あるべきではない場所にアサーションを配置すると、あらゆる種類の「望ましくない動作」が発生する可能性があるため、私の観点では、例外をスローする代わりにアサーションを使用しても実際には何も得られません。あなたは私に同意しますか、それとも私はここで何かが欠けていますか?
注:「理論上」の違い(デバッグとリリース、使用パターンなど)は完全に理解していますが、私が見ているように、アサートを実行するのではなく、例外をスローする方がよいでしょう。プロダクションリリースでバグが発見された場合でも、「アサーション」を失敗させたいので(結局のところ、「オーバーヘッド」は途方もなく小さい)、代わりに例外をスローする方がよいでしょう。
編集:私が見ているように、アサーションが失敗した場合、それはアプリケーションがある種の破損した予期しない状態に入ったことを意味します。では、なぜ実行を継続したいのでしょうか。アプリケーションがデバッグバージョンで実行されているかリリースバージョンで実行されているかは関係ありません。同じことが両方に当てはまります