当前位置:  开发笔记 > 编程语言 > 正文

如何在Exception堆栈中查找特定异常

如何解决《如何在Exception堆栈中查找特定异常》经验,为你挑选了1个好方法。

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

所以让我们假设ex.InnerException.InnerException.InnerException是" SomeException" 的类型

C#中是否有任何内置API会尝试在异常堆栈中找到给定的异常类型?

例:

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

Jon Skeet.. 6

不,我不相信有任何内置的方式.虽然写起来并不难:

public static T LocateException(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();

(注意缩短名称 - 根据自己的喜好调整:)



1> Jon Skeet..:

不,我不相信有任何内置的方式.虽然写起来并不难:

public static T LocateException(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();

(注意缩短名称 - 根据自己的喜好调整:)

推荐阅读
大大炮
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有