.net - 需要异常号而不是消息字符串

标签 .net exception error-handling

我想知道异常是否是例如“内存溢出异常”。但是,如果操作系统上的语言不是英语,而是中文(例如)或德语,则消息会更改。而且我再也看不到消息字符串了。在MSDN上,我没有找到要使用的异常号。如何找到异常(exception)编号?

   Public Shared Sub Main()
      Dim x As Integer = 0
      Try
         Dim y As Integer = 100 / x
      Catch e As Exception'here, 123 is not working
         if e is ArithmeticException(123) then Console.WriteLine("Generic Exception Handler: {0}", e.ToString())
      End Try
   End Sub

示例(请看<-行)
   Try
                    m_DxFilGraphManager.Run()
                Catch ex As System.Runtime.InteropServices.COMException
                    If ex.Message.Contains("0x800705AA") Then '<-- Bad methode. How to do it better?
                        Return "#ERROR: Can not start capturing. It seems to be a possiblity to change the IEEE 1394 bus host controler system driver in your device manager to 'legacy / alt'. " & ex.Message
                    Else
                        Return "#ERROR: " & ex.Message
                    End If
      End Try

最佳答案

通常,在.NET中(尽管除了约定外没有任何强制执行),每种原因都有一个从System.Exception派生的专用Exception-类型。因此,例如,您的“内存溢出”很可能由System.OutOfMemoryException发出信号。 checkout the System.Exception class hierarchy on MSDN以获取有关.NET框架中异常类型的更多信息。尽管您的代码和第3方组件始终可以定义自己的代码。

话虽如此,它们肯定是毛茸茸的情况,例如IOException。有时候,您几乎无法尝试解析错误消息-当然,这些消息可能已本地化。大多数情况下,您可以解决此问题。

通常,请确保仅捕获您实际感兴趣的异常类型。此外,您可能希望限制try块中的语句数量,以(而是)确保您对正确语句引发的异常使用react。

最后,粗粒度异常处理与细粒度异常处理同样不好。它始终取决于您的实际代码。

关于.net - 需要异常号而不是消息字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6409086/

相关文章:

python - AttributeError : '_tkinter.tkapp' object has no attribute 'text' in tkinter

java - 如何将错误消息从servlet发送到jsp页面?

c# - 当我在可编辑单元格中写入值时如何捕获 DataGridView 验证错误?

java - 如何捕获Hibernate DB连接错误异常?

ruby - 当你在 ruby​​ 中没有指定异常类时,你会捕获哪些异常?

Java:神秘的 Java 未捕获异常处理程序 [附代码]

IOS:当网络不可用时使用 stringWithContentsOfURL

.net - .NET 的轻量级持续集成服务器

c# - 处理 Process.Start() 抛出的 Win32Exception

c# - .NET xsd 导入器创建不可序列化的类