VB.Net/Language Basics/Throw

Материал из VB Эксперт
Версия от 15:42, 26 мая 2010; Admin (обсуждение | вклад) (1 версия)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

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>