我想知道例外是否是“内存溢出异常”。但是,如果操作系统上的语言不是英语,而是中文或德语,则消息会发生变化。我再也看不到消息字符串了。在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
示例(查看< - 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
答案 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。
您可以使用几种特定的例外类型 - DivideByZeroException
,NotFiniteNumberException
派生自ArithmeticException
。
答案 1 :(得分:1)
通常在.NET中(虽然除了约定之外没有强制执行),但是对于每个原因,都有一个从System.Exception
派生的专用异常类型。因此,例如,您的“内存溢出”最有可能由System.OutOfMemoryException
发出信号。 Checkout the System.Exception class hierarchy on MSDN以获取有关.NET框架中的异常类型的更多信息。虽然您的代码和第三方组件始终可以自己定义。
话虽如此,他们肯定是毛茸茸的案件,例如IOException
。有时你几乎不会试图解析错误信息 - 当然可能是本地化的。大多数时候你都可以解决这个问题。
作为一项规则,请确保只捕获您实际感兴趣的异常类型。此外,您可能希望限制try-block中的语句数量(相当)确保您对引发的异常做出反应通过正确的陈述。
最后,太细粒度的异常处理同样糟糕,因为太细粒度的异常处理。它总是取决于您的实际代码。