我使用以下内容提供了有关我的代码中可能出现的常见异常的更多信息,唯一的问题是如果生成的异常没有InnerException消息则会出现此错误。
Catch ex As Exception
'MessageBox.Show(ex.Message) 'If there is no InnerException.
MessageBox.Show(ex.InnerException.InnerException.Message)
End Try
有更好的方法吗?
答案 0 :(得分:3)
你可以创建一个递归函数,只要它们存在就能抓住内部异常,这样你就可以得到完整的细节,如果你有一个例外,或者3个异常相互分层。
Public Function ReadException(ByVal ex As Exception) As String
Dim msg As String = ex.Message
If ex.InnerException IsNot Nothing Then
msg = msg & vbCrLf & "---------" & vbCrLf & ReadException(ex.InnerException)
End If
Return msg
End Function
并在你的捕获中:
Catch ex As Exception
MessageBox.Show(ReadException(ex))
End Try
答案 1 :(得分:2)
只是把它包围起来如果不是什么,但如果你做了很多,写一个快速的帮助函数,如:
Private Function GetErrorText(ByVal ex As Exception) As String
Dim err As String = ex.Message
If ex.InnerException IsNot Nothing Then
err &= " - More details: " & ex.InnerException.Message
End If
Return err
End Function
然后你可以MessageBox.Show(GetErrorText(ex))
。