10

明らかな何かが欠落している可能性がありますが、.NETの関数によってスローされる例外と、例外がスローされる理由についての参照がどこかにありますか?

例として、私は最近Visual C#2008でLinqを試していて、XMLファイルをXDocumentにロードしていました。存在しないファイルを読み込もうとするとFileNotFound例外がスローされることに気付いたのはテストを通じてのみでしたが、ファイルではなくディレクトリを読み込もうとするとUnauthorizedAccessExceptionが発生します。また、System.IO名前空間を調べると、FileLoad例外やPathTooLongExceptionなどが表示され、いつスローされるかは推測できますが、まだ考えていない状況でスローされる可能性のあるものが他にもある可能性があります。 。

私が今持っている唯一の解決策は、私が知っているものをキャッチしてからExceptionタイプをキャッチすることですが、私が遭遇する可能性が最も高いタイプの例外とその理由を正確に知ることができればと思います。MSDNライブラリにこの種の情報があると思っていたのですが、どこにも見つかりません。私はただ盲目ですか?この情報は他にありますか?

編集:いくつかの詳細、今私はXDocument.Load(string)関数によってスローされる可能性のある例外を探しています。オンラインドキュメントやオブジェクトブラウザには何も関係がないようです。いくつかのテストを実行して、何に実行されるかを確認する必要がありますか?

4

3 に答える 3

8

いい質問です。20/20の視力があります。C#/。NETは、throwsステートメント(つまり、チェックされた例外)を実装していません。

Javaなどの言語から来た人は誰でもこれについて疑問に思うでしょう。

C#の父であるAnders Hejlsbergが、この記事/インタビューで、チェックされた例外をC#から除外する理由を説明しています。良い読み物です。

その記事から、アンダースは言います:

チェックされた例外について私が懸念しているのは、彼らがプログラマーにかける手錠です。プログラマーがこれらすべてのthrows句を持つ新しいAPIを選択しているのを見て、次にコードがどのように複雑になるかを見て、チェックされた例外がそれらを助けていないことに気付きます。これは、例外処理の方法を説明するこれらの独裁的なAPIデザイナーの一種です。彼らはそうすべきではありません。

したがって、Mitchとmonoxideが述べているように、.NET FCLのMSDNドキュメントには、各クラスに関連する例外と、各名前空間内で発生する可能性のある例外がリストされています。

于 2008-10-12T02:33:38.283 に答える
2

関数が例外をスローした場合、通常、オフラインヘルプページの下部またはオブジェクトブラウザに一覧表示されます。また、オンラインMSDNライブラリの関数を呼び出す方法に関する情報(string.Contains()など)のすぐ下にもリストされており、「例外」というラベルが付けられています。

さらに、実際に例外をスローするのは関数、プロパティなどだけなので、これらのことは一般的なドキュメントではカバーされておらず、与えられた例のように、実際にそれらをスローする関数またはアクセサーのドキュメントでのみカバーされています。最善の策は、VSのオブジェクトブラウザを、関心のあるクラスで確認することです。

于 2008-10-12T02:29:26.200 に答える
1

.NETはJavaの「throws」キーワードのようなものを実装していないため、最善の策はオンラインのMSDNドキュメントを確認することです。

編集:名前空間ドコ(たとえばSystem.IOの場合)を見ると、スローされる可能性のある例外が一覧表示されます。

于 2008-10-12T02:25:45.553 に答える