c# - 如何在 C# 中获取异常错误代码

标签 c# exception

try
{
     object result = processClass.InvokeMethod("Create", methodArgs);
}
catch (Exception e)
{  
    // Here I was hoping to get an error code.
}

当我调用上面的 WMI 方法时,我预计会被拒绝访问。在我的 catch block 中,我想确保引发的异常确实是针对拒绝访问的。有什么方法可以获得它的错误代码吗?拒绝访问的 Win32 错误代码是 5。 我不想在错误消息中搜索被拒绝的字符串或类似的东西。

谢谢

最佳答案

您可以使用它来检查 Win32Exception derived exception. 的异常和内部异常

catch (Exception e) {  
    var w32ex = e as Win32Exception;
    if(w32ex == null) {
        w32ex = e.InnerException as Win32Exception;
    }    
    if(w32ex != null) {
        int code =  w32ex.ErrorCode;
        // do stuff
    }    
    // do other stuff   
}

从 C# 6 开始,when可以在 catch 语句中用于指定一个条件,该条件必须为执行特定异常的处理程序。

catch (Win32Exception ex) when (ex.InnerException is Win32Exception) {
    var w32ex = (Win32Exception)ex.InnerException;
    var code =  w32ex.ErrorCode;
}

如评论中所述,您确实需要查看实际抛出的异常以了解您可以做什么,在这种情况下,特定的捕获优于仅捕获异常。像这样的东西:

  catch (BlahBlahException ex) {  
      // do stuff   
  }

还有 System.Exception has a HRESULT

 catch (Exception ex) {  
     var code = ex.HResult;
 }

但是,它仅适用于 .NET 4.5 以上版本。

关于c# - 如何在 C# 中获取异常错误代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6893165/

相关文章:

c# - linq-to-sql 按连接表中的字符串列表分组

c# - 在循环中使用 Microsoft.MSHTML,内存泄漏

c# - 如何在 ASP.NET MVC 应用程序中使用 OracleMembershipProvider

java - Applet java 用 chrome 抛出异常

exception - mybatis异常时如何获取参数

java - 有没有办法摆脱我得到的这个空指针异常?

c# - 确定位图大小以保存文本字符串

c# - DbGeography.PointFromText 错误异常已被调用的目标抛出

java - 为什么在 Java 中使用 BufferStrategy 和 Swing Timer 时会出现空指针异常?

design-patterns - 什么情况下应该有人 "try...catch"?这适用于图书馆吗?