0

複数回実行され、例外が発生しやすいループがあります(Webベースです)。ただし、エラーが発生した場合に次の反復で移動するため、メソッドから直接何もスローしたくありません。そこで、呼び出し元が渡す参照パラメーターを追加すると、すべての例外がそこに配置されます。

例外と障害URLをユーザーに返したいので、次のオブジェクトを作成しました。

class KeywordException
{
    Exception ex;
    string faultURL;
}

次のようにユーザーに返されますref List<KeywordException> exceptions

これまでのところすべて問題ありません。次のような例外をキャッチします。

catch (ArgumentNullException ane)
{
    exceptions.Add(new KeywordException(ane, URL));
    continue;
}

それは機能し、例外がユーザーに返されますが、呼び出し元のコードからどのようにして例外が実際に何であったかを知ることができますか?私が得るのはException、それが実際ArgumentNullExceptionにこの場合であるときだけです。

4

3 に答える 3

1

プロパティを見ることができますInnerException-それはすべての例外に存在します。

この情報は、例外のスタックトレースにもあります。

のコンストラクターの1つは-をException取ります。これを使用すると、は渡された例外に設定されます。ExceptionInnerException

于 2012-04-13T11:32:01.417 に答える
1

コンパイル時のタイプKeywordException.exは単なるExceptionですが、ログに記録すると、実際のオブジェクトが表示されます。次を使用して特定のタイプをテストできます。

if (keywordException.ex is ArgumentNullException)

しかし、私はあなたがそれをしたいとは思わない。例外を無条件にログに記録するか、任意の形式でユーザーに表示するだけで問題ありません。

編集:もちろんGetType()、例外を呼び出してそのタイプを取得することもできます:

Type exceptionType = keywordException.ex.GetType();

...しかし、一部の例外を他の例外とは異なる方法で処理する理由はまだ明確ではありません。

編集:例外でタイプ固有の情報を使用する必要がある場合は、次のようなものを使用する必要があります。

WebException webException = keywordException.ex as WebException;
if (webException != null)
{
    // Use webException here
}
于 2012-04-13T11:32:38.250 に答える
1

問題は、KeywordExceptionクラスが例外を例外として格納していることです(これは理にかなっており、おそらく正しいです)。

なぜ例外の正確なタイプを知りたいのですか?ユーザーにメッセージを表示するためですか?この場合、リフレクションを使用して、ex変数の具体的なタイプを取得できます。

string exceptionType = keywordException.ex.GetType().Name;
于 2012-04-13T11:39:34.360 に答える