2009-03-19 5 views
2

は「SomeExceptionは」例外スタック内の特定の例外を見つけるためにどのように

がされるタイプのものであり、私たちはex.InnerException.InnerException.InnerExceptionを想定してみましょう、私たちは特定の例外は「SomeException」例外スタックの一部であることを前提としていそう

をしてみましょう例外スタック内の特定の例外タイプを見つけることを試みるC#の組み込みAPIがありますか?

例:

SomeException someExp = exp.LocateExceptionInStack(typeof(SomeException)); 
+0

私はそこにいるとは思わない、おそらくあなたはそれをしたくないから。このような複雑な方法で例外を処理したいのはなぜですか? – Grzenio

+0

私はこれまで、特定の種類のOracle例外を、原因に応じてさまざまな深さを持つスタックのどこかで見つけることを試みる必要がありました。 –

+0

ああ、オラクル、十分なフェア – Grzenio

答えて

6

いいえ、私はそれを行うための方法で構築された任意のはありだとは思いません。あなたがC#3を使用している場合

public static T LocateException<T>(Exception outer) where T : Exception 
{ 
    while (outer != null) 
    { 
     T candidate = outer as T; 
     if (candidate != null) 
     { 
      return candidate; 
     } 
     outer = outer.InnerException; 
    } 
    return null; 
} 

は、あなたが(ちょうど「この例外外」パラメータを作る)それを拡張メソッドを作ることができ、それを使用するためにも、よりよいだろう:それはしかし書くことは難しいことではありません

SomeException nested = originalException.Locate<SomeException>(); 

(同様の名前の短縮を注意してください - あなた自身の好みに合うように調整:)

1

それは、コードのわずか4行です:

public static bool Contains<T>(Exception exception) 
     where T : Exception 
    { 
     if(exception is T) 
      return true; 

     return 
      exception.InnerException != null && 
      LocateExceptionInStack<T>(exception.InnerException); 
    } 
+0

再帰を行うことになっている場合は、ContainsまたはLocateExceptionInStackを呼び出すかどうかを判断することができます。 –

関連する問題