[解決済み] .NETの場合 必要な設定がない場合、どの例外をスローするか?
質問
以下は標準的なシナリオです。
if(string.IsNullOrEmpty(Configuration.AppSettings["foobar"]))
throw new SomeStandardException("Application not configured correctly, bozo.");
問題は、完全に確信があるわけではないのですが
どの
例外
SomeStandardException
であるべきです。
3.5 Frameworkを熟読し、2つの可能性の高い候補を見つけました。
ConfigurationException
と
ConfigurationErrorsException
.
System.Configuration.ConfigurationException(システム構成.コンフィギュレーション例外
設定システムエラーが発生したときにスローされる例外です。 設定システム・エラーが発生したときにスローされる 発生したときにスローされる例外です。
備考
このConfigurationException
例外は がスローされます。 例外が投げられます。 例外がスローされます。 がスローされます。考えられる理由 この場合、設定ファイル内のXMLが不正であること が不正である、ファイル のパーミッションの問題、およびコンフィギュレーション プロパティに有効でない値が含まれている が有効でない場合などです。
注意してください。
は
ConfigurationException
オブジェクトは は後方互換性のために維持されています。 そのためConfigurationErrorsException
オブジェクトに置き換わります。 オブジェクトに置き換わります。
この例外は私が必要としているものにぴったりなのですが、廃止されたので、atthayにイクナイします。
このため、完全に不可解な
ConfigurationErrorsException
:
System.Configuration.ConfigurationErrorsException(システム構成.コンフィギュレーション.コンフィギュレーションエラーズ例外
現在の値は EnableSessionStateの値ではありません。
ご覧の通り、そのドキュメントは全く役に立ちません。(ローカルとオンラインのヘルプの両方でそのようになっています。) クラス自体の検査は、私が欲しいもののために徹底的に過剰であることを示します。
一言で言えば、私は、アプリケーション構成設定が欠けているか、無効な値を含んでいるときに投げられるべき標準的な例外を必要とします。フレームワークには、アプリケーションが使用するために、そのような例外が焼きこまれていると思うでしょう。(それは明らかにそうでしたが、それは時代遅れとマークされ、何かで置き換えられました。 大いに より大きなスコープで置き換えられました)。
もしあれば、皆さんはどのようなソリューションを使用していますか?
編集の補足
一部の人は、デフォルト値を提供して続けることができるかどうか尋ねました。特定のケースでは、はい、そのようなケースでは、例外はスローされません。しかし、特定の設定については、これは適用されません。たとえば、データベース サーバー名と資格情報、認証サーバー、およびインストールされたサード パーティ製アプリケーションのパスなどです。
私が主に取り組んでいるアプリケーションはバッチモードで実行されるコンソールアプリケーションであり、適切に設定されていない場合に main メソッドによって捕捉され適切に記録される例外をスローするようにしたい、ということも注目すべき点です。(これは私が受け継いだレガシーコードで、現在は単に を想定しています。 を想定しています)。
どのように解決するのですか?
例外を投げるのは、Framework にある既存の例外に限定されるわけではありません。 もし、既存の例外を使うことになったとしても、絶対にドキュメントに従わなければならないわけではありません。 ドキュメントには、どのように フレームワーク が与えられた例外をどのように使用するかを説明しますが、どのようにしたら あなた は既存の例外を使用/再利用することを選択する方法について、いかなる制限も意味しません。
あなたのアプリケーションです。文書化し、設定値がない場合にスローされる例外を明確に示す限り、好きな例外を使用することができます。 もし、非常に具体的に 欠落 値の非常に具体的な表示が必要な場合は、独自の ConfigurationSettingMissing 例外を記述することを検討することができます。
[Serializable]
public class ConfigurationMissingException : ConfigurationErrorsException
{}
編集: この場合、独自の例外を書くことは、例外がどこから来るのか、フレームワークなのか、それともあなたのアプリケーションなのかについて、決して混乱しないことを保証するという付加的な利点を伴います。 フレームワークは決してあなたのカスタム例外を投げません。
UPDATE: コメントに同意したので、私はサブクラスをExceptionからConfigurationErrorsExceptionに変更しました。 アプリケーション固有の例外が必要な場合を除き、Exception クラスを避け、可能な限り既存のフレームワーク例外からカスタム例外をサブクラス化することが一般的に良いアイデアだと思います。
関連
-
[解決済み】「The breakpoint will not currently be hit」を改善するには?このドキュメントにはシンボルが読み込まれていません。" という警告はどうすれば改善されますか?
-
[解決済み] [Solved] ファイル *.mdf をデータベースとしてアタッチできない
-
[解決済み] 1は有効なWin32アプリケーションではありません "を解決するには?
-
[解決済み] 複数の例外を一度にキャッチする?
-
[解決済み] Pythonで悪い/不正な引数の組み合わせに対してどの例外を発生させるべきですか?
-
[解決済み] noexceptを本当に使うべきはいつですか?
-
[解決済み] Javaにおける例外処理によるパフォーマンスへの影響とは?
-
[解決済み] 例外を発生させるタイミングは?
-
[解決済み】Exceptionを投げるとき、どの部分が高価なのですか?
-
[解決済み】ArrayとList<T>の比較。いつどちらを使うか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】プラットフォームが同じでも「不正なフォーマットでプログラムを読み込もうとしました。
-
[解決済み] スマートクライアント・ソフトウェアファクトリーの体験談
-
[解決済み] ネットワークの位置からアセンブリをロードすることはできません
-
[解決済み] ASP.NET control to render a <div>
-
[解決済み] Windowsイベントログで参照される「フレームワークのバージョン」とは何ですか?
-
[解決済み] DockPanelを空きスペースいっぱいに表示させる方法
-
[解決済み] 1は有効なWin32アプリケーションではありません "を解決するには?
-
[解決済み] .NET Coreと.NET Standard Class Libraryのプロジェクトタイプの違いは何ですか?
-
[解決済み] .NETにおけるstructとclassの違いは何ですか?
-
[解決済み] WCF - メッセージサイズのクォータを増加させる方法