VB.Net Tutorial/Development/Exception — различия между версиями
Admin (обсуждение | вклад) м (1 версия) |
|
(нет различий)
|
Текущая версия на 12:53, 26 мая 2010
Содержание
- 1 Basics of Visual Basic exception handling
- 2 Catch Exception in a function
- 3 Convert Exception to String
- 4 Display Exception Trace
- 5 Exception fields
- 6 Get Message from Exception
- 7 Serializable Exception Inheriting NullReferenceException
- 8 Set Exception HelpLink
- 9 Throw Exception out of a Method
- 10 Use properties Message, StackTrace and InnerException
Basics of Visual Basic exception handling
Public Class Tester
Public Shared Sub Main
Try
Dim numerator As Integer = Convert.ToInt32("123")
Dim denominator As Integer = Convert.ToInt32("321")
Dim result As Integer = numerator \ denominator
Console.WriteLine(result)
Catch formattingException As FormatException
Console.WriteLine("You must enter two integers")
Catch dividingException As DivideByZeroException
Console.WriteLine(dividingException.Message)
End Try
End Sub
End Class
0
Catch Exception in a function
Module Module1
Sub Main()
Try
AddNumbers(1, 2)
Catch Except As Exception
Console.WriteLine("Call generated error: " & Except.Message)
End Try
End Sub
Function AddNumbers(ByVal A As Integer, ByVal B As Integer) As Integer
Try
Throw New ArithmeticException()
Catch Except As Exception
Console.WriteLine(Except.Message)
End Try
End Function
End Module
Overflow or underflow in the arithmetic operation.
Convert Exception to String
Module Module1
Sub Main()
Dim A, B, C As Integer
A = 3
B = 0
Try
C = A Mod B
Catch Except As Exception
Console.WriteLine(Except.ToString())
End Try
End Sub
End Module
System.DivideByZeroException: Attempted to divide by zero. at Module1.Main()
Display Exception Trace
Module Module1
Sub Main()
Try
Console.WriteLine("Result: ", First())
Catch Except As Exception
Console.WriteLine(Except.StackTrace)
End Try
End Sub
Private Function First() As Integer
First = Second()
End Function
Private Function Second() As Integer
Second = Third()
End Function
Private Function Third() As Integer
Dim A As Integer = 0
Third = 100 Mod A
End Function
End Module
at Module1.Main()
Exception fields
Imports System.IO
Module Module1
Sub Main()
Dim SourceFile As StreamReader
Try
SourceFile = New StreamReader("FilenameISBad.XXX")
Catch Except As Exception
Console.WriteLine(Except.Message)
Console.WriteLine(Except.Source)
Console.WriteLine(Except.StackTrace)
Console.WriteLine(Except.TargetSite.Name)
End Try
End Sub
End Module
Get Message from Exception
Module Module1
Sub Main()
Dim A, B, C As Integer
A = 3
B = 0
Try
C = A Mod B
Catch Except As Exception
Console.WriteLine(Except.Message())
End Try
End Sub
End Module
Attempted to divide by zero.
Serializable Exception Inheriting NullReferenceException
Imports System
Imports System.Runtime.Serialization
<Serializable()> Public Class NodeNotFoundException : Inherits NullReferenceException
Dim st As String()
"Constructors
Public Sub New()
MyBase.New("No such node found in your collection.")
End Sub
Public Sub New(ByVal message As String)
MyBase.New(message)
End Sub
Public Sub New(ByVal message As String, ByVal inner As Exception)
MyBase.New(message, inner)
End Sub
End Class
Set Exception HelpLink
Option Strict On
Imports System
Class Tester
Public Shared Function DoDivide(ByVal a As Double, ByVal b As Double) As Double
If b = 0 Then
Dim e As New System.DivideByZeroException( )
e.HelpLink = "http://www.vbex.ru"
Throw e
End If
If a = 0 Then
Throw New System.ArithmeticException( )
End If
Return a / b
End Function "DoDivide
Shared Sub Main( )
Try
Dim a As Double = 5
Dim b As Double = 0
Console.WriteLine("{0} / {1} = {2}", a, b, DoDivide(a, b))
Catch e As System.DivideByZeroException
Console.WriteLine("DivideByZeroException! Msg: {0}", e.Message)
Console.WriteLine("Helplink: {0}", e.HelpLink)
Console.WriteLine("Stack trace: {0}", e.StackTrace)
Catch
Console.WriteLine("Unknown exception caught!")
Finally
Console.WriteLine("Close file here.")
End Try
End Sub "Main
End Class "Tester
DivideByZeroException! Msg: Attempted to divide by zero. Helplink: http://www.vbex.ru Stack trace: at Tester.DoDivide(Double a, Double b) at Tester.Main() Close file here.
Throw Exception out of a Method
Option Strict On
Imports System
Class Tester
Shared Sub Main( )
Console.WriteLine("Enter Main...")
Console.WriteLine("Enter Run...")
Func1( )
Console.WriteLine("Exit Run...")
Console.WriteLine("Exit Main...")
End Sub
Public Shared Sub Func1( )
Console.WriteLine("Enter Func1...")
Func2( )
Console.WriteLine("Exit Func1...")
End Sub
Public Shared Sub Func2( )
Console.WriteLine("Enter Func2...")
Throw New System.Exception( )
Console.WriteLine("Exit Func2...")
End Sub
End Class
Enter Main... Enter Run... Enter Func1... Enter Func2... Unhandled Exception: System.Exception: Exception of type "System.Exception" was thrown. at Tester.Func2() at Tester.Main()
Use properties Message, StackTrace and InnerException
Class Tester
Shared Sub Main()
Try
Method1()
Catch exceptionParameter As Exception
Console.WriteLine(exceptionParameter.ToString())
Console.WriteLine(exceptionParameter.Message)
Console.WriteLine(exceptionParameter.StackTrace)
Console.WriteLine(exceptionParameter.InnerException.ToString())
End Try
End Sub
Public Shared Sub Method1()
Method2()
End Sub
Public Shared Sub Method2()
Method3()
End Sub
Public Shared Sub Method3()
Try
Convert.ToInt32("Not an integer")
Catch formatException As FormatException
Throw New Exception("Exception occurred in Method3", _
formatException)
End Try
End Sub
End Class
System.Exception: Exception occurred in Method3 ---> System.FormatException: Input string was not in a correct format. at System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFor matInfo info, Boolean parseDecimal) at System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info) at Tester.Method3() --- End of inner exception stack trace --- at Tester.Method3() at Tester.Main() Exception occurred in Method3 at Tester.Method3() at Tester.Main() System.FormatException: Input string was not in a correct format. at System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFor matInfo info, Boolean parseDecimal) at System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info) at Tester.Method3()