15

フレームワークのさまざまな例外メッセージでこれを見たことがあると確信しています。MSDN ライブラリから次のページを確認しましたが、メッセージの内容に関するガイダンスはあまり見つかりませんでした。

例外をスローする
エラー メッセージの設計
Exception.Message プロパティ

それを説明できる最初のページの唯一の部分は、次のテキストです。

適切な権限を要求することなく、例外メッセージで機密情報を開示しないでください。

この問題を思い出させたのはDictionary<TKey, TValue>.Add メソッドによってスローされた ArgumentExceptionです。次のようになります。

System.ArgumentException : An item with the same key has already been added.

なぜこのように見えないのですか?

System.ArgumentException : An item with the same key(123) has already been added.

これは、123 が TKey 値であると仮定しています。基本的に、TKey 値を持つ任意の形式は、デバッグ中にエラーを追跡するのに役立つものです。

これが含まれていない既知の理由はありますか?

メッセージ内のキーを使用して引数例外を再スローすることは悪い習慣と見なされますか? 私は独自の例外サブクラスを作成することを検討しましたが、これは組み込みの例外クラスを使用する方が良い選択肢のように思われる場合だと思います。

4

2 に答える 2

26

経験則として、フレームワーク内の例外的な状況は、新しい例外的な状況を作成することを避けたいと考えています。メッセージを次のようにフォーマットするには:

System.ArgumentException : An item with the same key(123) has already been added.

toStringキーパラメータの有効な実装があると仮定する必要があります。しかし、もしそうならnull?または、そのtoString?で新しい例外をスローするカスタム キーの場合。toStringそれとも、10 回に 1 回ランダムな例外をスローするメソッドを実装した愚か者でさえありますか? 内部例外がメモリ不足の状況によって引き起こされ、変換によって再びトリガーされる場合はどうなるでしょうか? 確実に報告できることを単に報告するよりも、予測不可能な結果が得られます。

于 2013-06-19T17:28:15.810 に答える