[解決済み] .NETで無効なパラメータや予期しないパラメータがあった場合、どのような例外を投げるべきですか?
質問
.NETでは、無効なパラメータや予期しないパラメータに対してどのような種類の例外をスローする必要がありますか?どのような場合に、別のものを選択するのでしょうか。
フォローアップ
月に対応する整数を期待する関数があり、'42'を渡した場合、どの例外を使用するでしょうか?これはコレクションではないけれど、quot;out of range"のカテゴリーに入るのでしょうか?
どのように解決するのですか?
使いたいのですが。
ArgumentException
,
ArgumentNullException
および
ArgumentOutOfRangeException
.
-
ArgumentException
- 引数がおかしい。 -
ArgumentNullException
- 引数がnullである。 -
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
. 簡単にして、その動作を文書化します。
関連
-
[解決済み] エンティティタイプ <type> は、現在のコンテキストのモデルの一部ではありません。
-
[解決済み】"指定されたパスのフォーマットはサポートされていません。"
-
[解決済み】Visual Studio: 操作を完了できませんでした。パラメータが正しくありません
-
[解決済み】ランダムなブーリアンを生成する最速の方法
-
[解決済み】2年前のMSDateを把握する【クローズド
-
[解決済み] C#の正しいバージョン番号を教えてください。
-
[解決済み] .NET Coreと.NET Standard Class Libraryのプロジェクトタイプの違いは何ですか?
-
[解決済み] .NET String.Format()で数値の千の位にカンマを追加する
-
[解決済み] Javaにおける例外処理によるパフォーマンスへの影響とは?
-
[解決済み】C#のyieldキーワードは何に使われるのか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】パディングが無効で、削除できない?
-
[解決済み】SmtpException: トランスポート接続からデータを読み取れません:net_io_connectionclosed
-
[解決済み】Sequence contains no matching element(シーケンスにマッチする要素がない
-
[解決済み】バックスラッシュを含むパス文字列のエスケープシーケンスが認識されない件
-
[解決済み】Socket.Selectがエラー "An operation was attempted on something that is not a socket" を返す。
-
[解決済み】"指定されたパスのフォーマットはサポートされていません。"
-
[解決済み】5.7.57 SMTP - MAIL FROMエラー時に匿名メールを送信するためにクライアントが認証されない
-
[解決済み】 C# 条件演算子エラー 代入、call、increment、decrement、await、new object 式のみ文として使用可能です。
-
[解決済み】URLから画像をダウンロードする方法
-
[解決済み] 関数を終了するには?