可以在重新抛出一般异常中找到原始异常类型吗?

时间:2011-04-14 08:15:58

标签: vb.net .net-3.5 exception-handling

我正在尝试捕获用户定义的权限异常 - 即用户执行其系统访问级别不允许的内容,抛出权限异常。我的问题是,异常被捕获,然后作为一个基因System.Exception重新抛出。

有没有办法可以推导出原始的异常类型,而不需要求助于if ex.ToString.Contains("Permission denied") Then ...等字符串比较?

2 个答案:

答案 0 :(得分:0)

您可以使用基本Exception类的InnerException属性,并循环到null

        try
        {
        }
        catch (Exception e)
        {
            while (e.InnerException != null)
                e = e.InnerException;

            Console.WriteLine(e.Message);
        }

答案 1 :(得分:0)

这样的事情:

Try


Catch e as Exception
    While e IsNot Nothing AndAlso Not TypeOf(e) is PermissionException
       e = e.InnerException;
    End While

    ' Rethrow if we can't handle it
    If e Is Nothing Then Throw 

    ' do whatever needs to be done when PermissionException is thrown

End Try