1. ホーム
  2. c#

[解決済み] .NETで無効なパラメータや予期しないパラメータがあった場合、どのような例外を投げるべきですか?

2022-04-15 10:01:04

質問

.NETでは、無効なパラメータや予期しないパラメータに対してどのような種類の例外をスローする必要がありますか?どのような場合に、別のものを選択するのでしょうか。

フォローアップ

月に対応する整数を期待する関数があり、'42'を渡した場合、どの例外を使用するでしょうか?これはコレクションではないけれど、quot;out of range"のカテゴリーに入るのでしょうか?

どのように解決するのですか?

使いたいのですが。 ArgumentException , ArgumentNullException および ArgumentOutOfRangeException .

他にも、引数そのものに注目するのではなく、呼び出し全体を判断するようなオプションもあります。

  • InvalidOperationException - 引数はOKかもしれませんが、現在のオブジェクトの状態ではNGです。 <サブ クレジットはSTW(旧Yoooder)へ。投票 回答 もアップしてください。
  • NotSupportedException - 渡された引数は有効ですが、この実装ではサポートされていないだけです。FTPクライアントを想像してみてください。そのクライアントがサポートしていないコマンドを渡すとします。

コツは、なぜその方法でメソッドを呼び出すことができないのかを最も適切に表現する例外を投げることです。理想的には、例外は何が間違っていたのか、なぜ間違っているのか、そしてどう修正するのかについて詳しく書かれている必要があります。

私は、エラーメッセージがヘルプやドキュメントなどのリソースを指し示してくれるのが大好きです。例えば、マイクロソフトはKBの記事で良い最初のステップを踏み出しました。 "Internet Explorer で Web ページにアクセスすると、"Operation aborted" というエラーメッセージが表示されるのですが?" . エラーが発生すると、エラーメッセージの中にあるKBの記事を指し示してくれます。しかし、なぜ失敗したのか、その具体的な理由を教えてくれません。

<サブ STW (ex Yoooder)さん、再びコメントありがとうございます。


フォローアップに対して、私なら ArgumentOutOfRangeException . この例外についてMSDNが言っていることを見てみましょう。

ArgumentOutOfRangeException がスローされます。 メソッドが呼び出されたときに、少なくとも に渡される引数のうち、1つは メソッドがNULLでない場合 参照 ( Nothing ビジュアルベーシックの場合) で、有効な値を含んでいない。

つまり、この場合、値を渡していますが、範囲が1~12なので、有効な値ではありません。しかし、あなたのAPIが何を投げているのか、それを文書化することで、明確にすることができます。なぜなら、私は次のように言うかもしれません。 ArgumentOutOfRangeException しかし、他の開発者は ArgumentException . 簡単にして、その動作を文書化します。