需要异常编号而不是消息字符串

时间:2011-06-20 09:17:46

标签: .net exception error-handling

我想知道例外是否是“内存溢出异常”。但是,如果操作系统上的语言不是英语,而是中文或德语,则消息会发生变化。我再也看不到消息字符串了。在MSDN我没有找到可以使用的例外号码。如何查找例外号码?

   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

Error handling

示例(查看< - line)

   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

2 个答案:

答案 0 :(得分:1)

使用适当的异常处理:

Public Shared Sub Main()
  Dim x As Integer = 0
  Try
     Dim y As Integer = 100 / x
  Catch e As ArithmeticException
     // handle ArithmeticException
  Catch e As Exception
     // handle Exception
  End Try
End Sub

抓住Exception是不好的做法 - 我建议您阅读the documentation

您可以使用几种特定的例外类型 - DivideByZeroExceptionNotFiniteNumberException派生自ArithmeticException

答案 1 :(得分:1)

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

话虽如此,他们肯定是毛茸茸的案件,例如IOException。有时你几乎不会试图解析错误信息 - 当然可能是本地化的。大多数时候你都可以解决这个问题。

作为一项规则,请确保只捕获您实际感兴趣的异常类型。此外,您可能希望限制try-block中的语句数量(相当)确保您对引发的异常做出反应通过正确的陈述。

最后,太细粒度的异常处理同样糟糕,因为太细粒度的异常处理。它总是取决于您的实际代码。