VB.Net/Language Basics/Throw
Содержание
Any Exception generatesd will be caught in the Catch block that follows
<source lang="vbnet"> Imports System Public Class MainClass
Shared Sub Main() Try Method1() " Output String representation of Exception, then output " values of properties InnerException, Message and StackTrace Catch exceptionParameter As Exception Console.WriteLine("exceptionParameter.ToString: " & _ vbCrLf & "{0}" & vbCrLf, exceptionParameter.ToString()) Console.WriteLine("exceptionParameter.Message: " & _ vbCrLf & "{0}" & vbCrLf, exceptionParameter.Message) Console.WriteLine("exceptionParameter.StackTrace: " & _ vbCrLf & "{0}" & vbCrLf, exceptionParameter.StackTrace) Console.WriteLine( _ "exceptionParameter.InnerException: " & _ vbCrLf & "{0}" & vbCrLf, _ exceptionParameter.InnerException.ToString()) End Try End Sub " Main Public Shared Sub Method1() Method2() End Sub Public Shared Sub Method2() Method3() End Sub Public Shared Sub Method3() " attempt to convert String to Integer Try Convert.ToInt32("Not an integer") Catch formatException As FormatException Throw New Exception("Exception occurred in Method3", _ formatException) End Try End Sub
End Class
</source>
Catch and rethrow exceptions
<source lang="vbnet"> Imports System Imports System.Data Imports System.IO public class MainClass
Shared Sub Main() Dim FileToRead As String = "test.txt" Dim TestFile As FileStream Dim Reader As New StreamReader(FileToRead) Do Dim I As Integer, S As String Dim Result As Integer Try S = Reader.ReadLine() I = CInt(S) Result = 100 \ I Console.WriteLine(Result) Catch DivByZero As System.DivideByZeroException Console.WriteLine("** Divide by zero **") Catch BadConversion As System.InvalidCastException Console.WriteLine("** " + S + " is not a number **") Throw New System.InvalidCastException("My own exception happened here", BadConversion) Catch OtherErrors As Exception Throw OtherErrors End Try Loop While Reader.Peek <> -1 End Sub
End Class
</source>
Exception occurs and caught, then rethrown to caller
<source lang="vbnet"> Imports System Public Class MainClass
Shared Sub Main(ByVal args As String()) Console.WriteLine("Calling ThrowExceptionCatchRethrow") Try ThrowExceptionCatchRethrow() Catch Console.WriteLine("Caught exception from " & _ "ThrowExceptionCatchRethrow in Main") End Try End Sub Public Shared Sub ThrowExceptionCatchRethrow() Try Console.WriteLine("In ThrowExceptionCatchRethrow") Throw New Exception("Exception in ThrowExceptionCatchRethrow") Catch exceptionParameter As Exception Console.WriteLine("Message: " & exceptionParameter.Message) Throw exceptionParameter Finally Console.WriteLine("Finally executed in ThrowException") End Try " any code placed here is never reached Console.WriteLine("End of ThrowExceptionCatchRethrow") End Sub
End Class
</source>
Throw an Exception
<source lang="vbnet"> Imports System Imports System.Configuration Imports System.Resources " Resource readers Public Class MainClass
Shared Sub Main() Throw New System.IO.FileLoadException() End Sub
End Class
</source>
Throw an Exception from a Function
<source lang="vbnet"> Imports System Imports System.Text Imports System.Text.RegularExpressions Public Class MainClass
Shared Sub Main(ByVal args As String()) Console.WriteLine("Enter Run...") Func1( ) Console.WriteLine("Exit Run...") End Sub Shared Public Sub Func1( ) Console.WriteLine("Enter Func1...") Func2( ) Console.WriteLine("Exit Func1...") End Sub "Func1 Shared Public Sub Func2( ) Console.WriteLine("Enter Func2...") Throw New System.Exception( ) Console.WriteLine("Exit Func2...") End Sub "Func2
End Class
</source>
Throw Exception Without Catch
<source lang="vbnet"> Imports System Public Class MainClass
Shared Sub Main(ByVal args As String()) Try ThrowExceptionWithoutCatch() Catch Console.WriteLine("Caught exception from " & _ "ThrowExceptionWithoutCatch in Main") End Try End Sub Shared Public Sub ThrowExceptionWithoutCatch() Try Console.WriteLine("In ThrowExceptionWithoutCatch") Throw New Exception( _ "Exception in ThrowExceptionWithoutCatch") Finally Console.WriteLine("Finally executed in " & _ "ThrowExceptionWithoutCatch") End Try " unreachable code; logic error Console.WriteLine("End") End Sub
End Class
</source>
Throws exception and catches it locally
<source lang="vbnet"> Imports System Public Class MainClass
Shared Sub Main(ByVal args As String()) " Try block throws exception Try Console.WriteLine("In Throw Exception With Catch") Throw New Exception("Exception in Throw Exception With Catch") " catch exception thrown in Try block Catch exceptionParameter As Exception Console.WriteLine("Message: " & exceptionParameter.Message) " Finally executes because corresponding Try executed Finally Console.WriteLine( _ "Finally executed in Throw Exception With Catch") End Try Console.WriteLine("End") End Sub
End Class
</source>