2010-06-12 6 views
1

J'utilisais ce qui suit pour fournir plus d'informations sur une exception commune qui peut se produire dans une partie de mon code, le seul problème est cette erreur si une exception est générée sans message InnerException.Display Capture InnerException Message

Catch ex As Exception 
    'MessageBox.Show(ex.Message) 'If there is no InnerException. 
    MessageBox.Show(ex.InnerException.InnerException.Message) 
End Try 

Y a-t-il une meilleure méthode pour cela?

Répondre

1

Vous pouvez créer une fonction récursive pour conserver les exceptions internes tant qu'elles existent, de cette façon vous obtiendrez tous les détails si vous avez une seule exception ou 3 exceptions superposées les unes aux autres.

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 

et vos prises:

Catch ex As Exception 
    MessageBox.Show(ReadException(ex)) 
End Try 
1

entourez par un Sinon rien, mais si vous faites beaucoup, écrire une fonction d'assistance rapide comme:

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 

Ensuite, vous pouvez juste faire MessageBox.Show(GetErrorText(ex)).

0

Vous pouvez tout simplement faire String.concat (ex.InnerException, "Anything Else") comme il semble le gérer mieux que de forcer à une chaîne.