Total .NET Analyzer Rule Documentation  

OnError Rule

Replace the OnError statement with structured exception handling.

Remarks

Prior versions of Visual Basic employed unstructured error handling through the OnError statement. Placing this statement at the beginning of a code block handled any errors that occurred within the block:


Sub DeleteFile()
On Error GoTo PROC_ERR
System.IO.File.Delete "C:\TempFile.txt"
PROC_ERR: MsgBox(Err.Number & ": " & Err.Description)
End Sub

Although Visual Basic .NET supports the OnError statement, you should avoid using this legacy error handling and take advantage of Visual Basic .NET's structured exception handling. Structured Exception Handling has many advantages, including:
- While the OnError statement is not portable to other languages, structured exception handling is supported in other .NET languages.
- Structured Exception Handling exposes full exception information identifying the exception and the location in code where it occurred.
- Structured Exception Handling offers the ability to centralize exception handling at an application's top level.

Resolution

Replace the legacy VB error handling code with a Try statement, made up of the following blocks:

Try block containing the statement to be executed.
Catch block containing the statement which handles the exception.
Finally block containing actions to take when the Try statement is exited (regardless of whether an exception occurred).

For instance, you could modify the example above to use structured exception handling:

Module NewClass
Sub DoSomething()
Try
System.IO.File.Delete("C:\TempFile.txt")
Catch notFound As System.IO.FileNotFoundException
' Do nothing, since the file doesn't exist.
Catch e As Exception
MsgBox(e.Message)
Finally
Console.WriteLine("Process complete.")
End Try
End Sub

See Also

Exception Handling Changes in Visual Basic

Try...Catch...Finally Statements

Handling Exceptions