例外のスタック内の特定の例外を見つける方法
質問
私たちは、特定の例外が「SomeException
」
その "ex.InnerException.InnerException.InnerException
" 私たちは<=>型であると仮定しましょう。
あるのいずれかの組み込みの例外スタック内の指定された例外の種類を見つけるためにしようとするC#でAPI?
例:
SomeException someExp = exp.LocateExceptionInStack(typeof(SomeException));
解決
いいえ、私はそれを行うための方法で構築された任意のはありだとは思いません。これは、しかし書くことは難しいことではありません。
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;
}
あなたがC#3を使用している場合は、あなたはそれ拡張メソッド作ることができます(単にパラメータが「この例外外」にする)と、それを使用するのも、立派になります:
SomeException nested = originalException.Locate<SomeException>();
(同様の名前の短縮を注意してください - あなた自身の好みに合うように調整します。)
他のヒント
これは、コードのわずか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);
}
所属していません StackOverflow