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