c# - 如何在异常堆栈中定位特定异常

标签 c# api exception logic

让我们假设一个特定的异常“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 outer”),使用起来会更好:

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

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

关于c# - 如何在异常堆栈中定位特定异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/661838/

相关文章:

c# - 如何正确捕获多个异步方法调用中的异常?

ruby-on-rails - ActiveResource 如何从具有单数名称的 REST API 中获取资源?

php - InvalidArgumentException 与 UnexpectedValueException

python - `with` s 中有几个 `try` s

scala - 为什么在 Try.recover 中抛出的异常不会中断执行流程?

c# - 我应该使这个 XmlSerializer 静态吗?

c# - 序列化混淆类 C#

c# - 将 Java 转换为 C# 问题

php - Laravel DecryptException-有效负载无效

json - postman :更具描述性的 tv4 验证错误消息