Undantagshantering i VB.Net (Try Catch)

โšก Smart sammanfattning

Undantagshantering i VB.Net hanterar kรถrtidsfel, som att dividera med noll, med hjรคlp av nyckelorden Try, Catch, Finally och Throw sรฅ att ett program kan reagera pรฅ problem smidigt istรคllet fรถr att krascha under kรถrning.

  • ๐Ÿ” undantag: Ett problem som uppstรฅr under kรถrning, till exempel att dividera ett tal med noll.
  • ๐Ÿ›ก๏ธ Fรถrsรถk och fรฅnga: Try omsluter den riskabla koden; Catch hanterar undantaget den genererar.
  • โœ… Slutligen: Blocket Finally kรถrs oavsett om ett undantag intrรคffar eller inte.
  • ๐Ÿšฆ Kasta: Throw genererar ett undantagsobjekt som hรคrletts frรฅn System.Exception-klassen.
  • ๐Ÿงฉ Anpassade undantag: ร„rv ApplicationException fรถr att definiera dina egna undantagstyper.
  • ๐Ÿค– AI-hjรคlp: GitHub Copilot och IntelliCode generera Try Catch-block medan du skriver.

Undantagshantering i VB.Net

Vad รคr ett undantag i VB.Net?

An undantag i VB.Net hรคnvisar till ett problem som uppstรฅr under programexekveringen. Det orsakas av en ovรคntad omstรคndighet. Ett bra exempel รคr nรคr du utfรถr en divisionsoperation och sedan dividerar med noll (0). Ett undantag kommer att tas upp.

Vad รคr undantagshantering i VB.Net?

Med undantag i VB.Net, kan du รถverfรถra kontrollen av ett program frรฅn en del till en annan. I VB.Net hanteras undantag med fรถljande fyra nyckelord:

Nyckelord Detalj
Prova Arbetet med Try-blocket รคr att identifiera kodblocket fรถr vilket ett specifikt undantag kommer att aktiveras. Den ska fรถljas av ett fรฅngstblock.
brottning Fรฅnga av undantaget gรถrs i detta block. Det รคr en undantagshanterare dรคr undantaget hanteras.
Slutligen Anvรคnd Finally-blocket fรถr att kรถra en uppsรคttning satser oavsett om ett undantag har intrรคffat eller inte.
Kasta Ett undantag gรถrs efter att ett problem har uppstรฅtt. Detta รคr arbetet med nyckelordet Throw.

Nรคr dessa fyra nyckelords roller รคr tydliga, fundera รถver hur de kombineras i ett enda pรฅstรฅende.

Syntax fรถr Try Catch i VB.Net

Try Catch-satserna i VB.Net definieras med hjรคlp av nedanstรฅende syntax:

Try
   [ try_Statement(s) ]
   [ Exit Try ]
[ Catch [ exception_name [ As type ] ] [ When expression ]
   [ catch_Statement(s) ]
   [ Exit Try ] ]
[ Catch ... ]
[ Finally
   [ finally_Statement(s) ] ]
End Try

Try/Catch-blocket bรถr omge koden som kan leda till ett undantag. Denna kod รคr kรคnd som en skyddad kod. Du kan anvรคnda flera catch-satser nรคr du behรถver fรฅnga olika typer av undantag.

Exception Hantering Exempel i VB.Net med Try Catch och Finally

Med Try/Catch-satserna kan du separera din vanliga programkod frรฅn felhanteringssystemet. Lรฅt oss demonstrera hur man hanterar ett undantag med hjรคlp av nyckelorden Try, Catch och Finally.

Steg 1) Skapa en ny konsolapplikation.

Steg 2) Anvรคnd den hรคr koden:

Module Module1
    Sub divisionFunction(ByVal n1 As Integer, ByVal n2 As Integer)
        Dim answer As Integer
        Try
            answer = n1 \ n2
        Catch ex As DivideByZeroException
            Console.WriteLine("Exception: {0}", ex)
        Finally
            Console.WriteLine("Answer is: {0}", answer)
        End Try
    End Sub
    Sub Main()
        divisionFunction(4, 0)
        Console.ReadKey()
    End Sub

End Module

Steg 3) Klicka pรฅ Start-knappen i verktygsfรคltet fรถr att kรถra koden. Du bรถr fรฅ fรถljande utdata:

VB.Net Try Catch Slutligen visar konsolutdata det fรฅngade DivideByZeroException

Hรคr รคr en skรคrmdump av koden:

VB.Net Try Catch Slutligen exempelkod visas i Visual Studio

Fรถrklaring till Code:

  1. Skapa en modul som heter Module1.
  2. Skapa en underprocedur som heter divisionFunction med tvรฅ heltalsargument n1 och n2. ByVal รคr ett VB.Net nyckelord som anger att vรคrdena fรถr argumenten kommer att skickas av vรคrde.
  3. Skapa en heltalsvariabel med namnet svar.
  4. Start av Try/Catch-blocket. Vi mรฅste omge koden som vi misstรคnker kan skapa ett undantag med detta block.
  5. Utfรถra en divisionsoperation mellan vรคrdena fรถr variablerna n1 och n2. Resultatet av divisionsoperationen tilldelas variabelsvaret. Den hรคr koden kan skapa ett undantag, till exempel nรคr vi dividerar ett tal med noll, dรคrfรถr har vi omgett det med Try/Catch-blocken.
  6. Fรฅnga undantaget som heter DivideByZeroException och tilldela det genererade undantagsmeddelandet till ex.
  7. Skriver ut lite text pรฅ konsolen fรถr att informera anvรคndaren om typen/namnet pรฅ undantaget som togs upp.
  8. Blocket till slut. Detta kommer att utfรถras oavsett om ett undantag fรฅngas eller inte.
  9. Skriver ut lite text pรฅ konsolen som visar resultatet av delningsoperationen.
  10. Slutet pรฅ Try-blocket, det vill sรคga slutet av felhanteringskoden.
  11. Slutet pรฅ delproceduren Funktion.
  12. Start av huvuddelproceduren.
  13. Anropa/anropa underproceduren divisionFunction. Vรคrdena fรถr de tvรฅ heltalsargumenten skickas hรคr. Vรคrdet pรฅ n1=4 och n2=0. Detta innebรคr att divisionsoperationen blir 4\0, det vill sรคga n1\n2.
  14. Pausar konsolfรถnstret i vรคntan pรฅ att anvรคndaren ska vidta รฅtgรคrder fรถr att stรคnga det.
  15. Slut pรฅ det huvudsakliga underfรถrfarandet.
  16. Slutet pรฅ modulen.

Anvรคndardefinierade undantag i VB.Net

I VB.Net kan du definiera dina egna undantag. Du kan hรคmta anvรคndardefinierade undantagsklasser frรฅn ApplicationException-klassen. Lรฅt oss demonstrera detta med ett exempel:

Exempel pรฅ anvรคndardefinierat undantag i VB.Net

Hรคr รคr ett exempel pรฅ ett anvรคndardefinierat undantag i VB.Net:

Steg 1) Skapa en ny konsolapplikation.

Steg 2) Anvรคnd fรถljande kod:

Module Module1

    Public Class HeightIsZeroException : Inherits ApplicationException
        Public Sub New(ByVal text As String)
            MyBase.New(text)
        End Sub
    End Class
    Public Class Height
        Dim height As Integer = 0
        Sub showHeight()
            If (height = 0) Then
                Throw (New HeightIsZeroException("Zero Height found"))
            Else
                Console.WriteLine("Height is: {0}", height)
            End If
        End Sub
    End Class
    Sub Main()
        Dim hght As Height = New Height()
        Try
            hght.showHeight()
        Catch ex As HeightIsZeroException
            Console.WriteLine("HeightIsZeroException: {0}", ex.Message)
        End Try
        Console.ReadKey()
    End Sub

End Module

Steg 3) Klicka pรฅ Start-knappen i det รถvre fรคltet fรถr att kรถra koden. Du bรถr fรฅ fรถljande utdata:

VB.Net anvรคndardefinierat HeightIsZeroException-meddelande skrivs ut pรฅ konsolen

Hรคr รคr en skรคrmdump av koden:

VB.Net anvรคndardefinierad undantagsklass exempelkod i Visual Studio

Fรถrklaring till Code:

  1. Skapa en modul som heter Module1.
  2. Skapar en undantagsklass med namnet HeightIsZeroException. Klassen รคrver alla ApplicationException-klasser.
  3. Skapa en underprocedur med namnet New. Det kommer att ta ett strรคngargument som heter text.
  4. Anropar basklasskonstruktorn och skickar ovanstรฅende argument till den.
  5. Slut pรฅ den nya underproceduren.
  6. Slutet pรฅ klassen HeightIsZeroException.
  7. Skapa en klass som heter Height. Dess public access modifier รคr Public, vilket betyder att den kommer att vara allmรคnt tillgรคnglig.
  8. Skapa en heltalsvariabel med namnet Height och initialisera dess vรคrde till 0.
  9. Skapa en underprocedur med namnet showHeight().
  10. Kontrollerar nรคr vรคrdet pรฅ variabeln Height รคr 0. Vi har anvรคnt villkoret If...Then.
  11. Att kasta HeightIsZeroException om ovanstรฅende villkor รคr sant. Meddelandet Zero Height Found kommer att visas nรคr detta undantag kastas.
  12. Den andra delen som ska kรถras nรคr If-villkoret inte รคr sant.
  13. Meddelande att skriva ut pรฅ konsolen som visar hรถjden nรคr den inte รคr 0.
  14. Slut pรฅ If-villkoret.
  15. Slut pรฅ underproceduren showHeight().
  16. Slut pรฅ klassen Hรถjd.
  17. Start av huvuddelproceduren.
  18. Skapa ett objekt med namnet Height som en instans av klassen Height.
  19. Start av undantagshanteringsblocket.
  20. Anropar delproceduren showHeight() som definierats i Height-klassen. Vi har anvรคnt ett objekt i den hรคr klassen fรถr att komma รฅt den hรคr metoden. Den hรคr raden kan resultera i ett undantag. Dรคrfรถr har vi omgivit den med en undantagshanteringskod.
  21. Fรฅnga HeightIsZeroException Exception som objekt ex om det intrรคffar.
  22. Meddelandet som ska skrivas ut pรฅ konsolen nรคr HeightIsZeroException fรฅngas.
  23. Slut pรฅ undantagshanteringsblocket.
  24. Pausa konsolfรถnstret och vรคnta pรฅ att en anvรคndare ska vidta รฅtgรคrder fรถr att stรคnga det.
  25. Slut pรฅ det huvudsakliga underfรถrfarandet.
  26. Slutet pรฅ modulen.

Kasta undantag i VB.Net

Vid undantagshantering kan du vรคlja att kasta ett objekt. Objektet mรฅste dock hรคrledas frรฅn System.Exception-klassen, direkt eller indirekt. Till exempel:

Exempel pรฅ kastundantag i VB.Net

Nedan fรถljer ett exempel pรฅ ett throw-undantag i VB.Net:

Steg 1) Skapa en ny konsolapplikation.

Steg 2) Anvรคnd fรถljande kod:

Module Module1

    Sub Main()
        Try
            Throw New ApplicationException("Throwing a custom exception")
        Catch ex As Exception
            Console.WriteLine(ex.Message)
        Finally
            Console.WriteLine("The Finally Block")
        End Try
        Console.ReadKey()
    End Sub


End Module

Steg 3) Klicka pรฅ Start-knappen i det รถvre fรคltet fรถr att kรถra koden. Du bรถr fรฅ fรถljande:

VB.Net Throw-satsens konsolutdata som visar det anpassade undantagsmeddelandet

Hรคr รคr en skรคrmdump av koden:

VB.Net Throw-undantagsexempelkod med Try Catch Finally

Fรถrklaring till Code:

  1. Skapa en modul som heter Module1.
  2. Start av huvuddelproceduren.
  3. Start av felhanteringskoden.
  4. Kasta ett undantagsobjekt. Den hรคr koden kan generera ett undantag och dรคrfรถr har vi omgett den med ett Try/Catch-block.
  5. Fรฅnga ett undantag som objekt ex om linjen ger ett undantag.
  6. Skriver ut undantagsmeddelandet pรฅ konsolen om det skulle intrรคffa.
  7. Blocket Slutligen fรถr att kรถra oavsett om ett undantag fรฅngas eller inte.
  8. Meddelandet som ska skrivas ut pรฅ konsolen nรคr Finally-blocket kรถrs.
  9. Slut pรฅ undantagshanteringskoden.
  10. Pausa konsolen en stund och vรคnta pรฅ att en anvรคndare ska vidta รฅtgรคrder fรถr att stรคnga den.
  11. Slut pรฅ det huvudsakliga underfรถrfarandet.
  12. Slutet pรฅ modulen.

Vanliga frรฅgor

Ja. En Try-sats รคr giltig utan Catch sรฅ lรคnge den innehรฅller ett Finally-block. Detta Try Finally-formulรคr kรถr rensningskod men hanterar inte sjรคlva undantaget.

Ja. Lista flera Catch-block fรถr att hantera olika undantagstyper. Ordna dem frรฅn mest specifika till minst specifika, eftersom VB.Net kontrollerar dem i ordning och anvรคnder den fรถrsta matchningen.

Nรคstan alltid. Exekveras Finally oavsett om ett undantag fรฅngas eller inte, och รคven efter en Return. Den hoppas bara รถver vid en End-sats eller en StackOverflowException.

Throw hรถjer om det aktuella undantaget och bevarar dess ursprungliga stack. trace. Kasta ex รฅterstรคller stacken trace till den aktuella raden, och dรถljer var felet egentligen bรถrjade. Fรถredrar vanlig Throw.

Ett syntaxfel upptรคcks av kompilatorn innan programmet kรถrs. Ett undantag intrรคffar vid kรถrning, under exekvering, och kan hanteras med ett Try Catch-block.

Vanliga exempel inkluderar DivideByZeroException, NullReferenceException, IndexOutOfRangeException, FormatException och OverflowException. Alla รคrver frรฅn System.Exception och kan fรฅngas upp individuellt.

Ja. GitHub Copilot omvandlar en kommentar i vanlig engelska till ett fullstรคndigt Try Catch Finally-block och fรถreslรฅr rรคtt undantagstyp. Granska alltid den genererade hanteraren.

Ja. Visual Studio IntelliCode erbjuder kontextmedvetna kompletteringar av helradsformat fรถr Catch-klausuler och undantagstyper, inlรคrda frรฅn tusentals projekt med รถppen kรคllkod.

Sammanfatta detta inlรคgg med: