让我们假设特定的异常“ SomeException”是异常堆栈的一部分,

因此,让我们假设ex.InnerException.InnerException.InnerException的类型为“ SomeException

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,则可以使其成为扩展方法(只需将参数“ this Exception external”设置为该方法),使用起来会更好:

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


(请注意名称的缩写-调整您自己的口味:)

10-08 01:22