Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Feilhåndtering | Datastrukturer og Filhåndtering
C# Utover Det Grunnleggende

bookFeilhåndtering

Du har kanskje støtt på begrepet kjøretidsfeil i tidligere kapitler. En kjøretidsfeil er en feil som oppstår mens programmet kjører – derav navnet "kjøretidsfeil".

Vanligvis, når en kjøretidsfeil oppstår, krasjer programmet eller slutter å svare.

Kompilatoren kan hjelpe deg med å påpeke de fleste feilene i koden vår, men kjøretidsfeil er stort sett uforutsigbare og avhenger ofte av usikre parametere.

For eksempel, hvis filbanen som sendes inn i StreamReader er ugyldig eller ikke eksisterer, vil det oppstå en kjøretidsfeil og programmet vil krasje. Derfor kan vi ofte plassere slik risikabel kode i try-catch-blokker for å prøve noe kode, og hvis det feiler, fange og håndtere feilen i stedet for at programmet krasjer.

Følgende er syntaksen for en try-catch-blokk:

index.cs

index.cs

copy
1234567
try { // code to try } catch (Exception errorVar) { // code to handle error }

Her er Exception et nøkkelord som representerer datatypen Exception.

Eksempel

index.cs

index.cs

copy
1234567891011121314151617
using System; using System.IO; class Program { static void Main(string[] args) { try { new StreamWriter("C:/a/random/path/that/does/not/exist.txt"); } catch(Exception error) { Console.WriteLine(error.Message); } } }
Note
Merk

Vi kan utelate (Exception error)-delen fra catch-setningen hvis vi ikke bruker error.

Følgende er noen vanlige tilfeller hvor en kjøretidsfeil kan oppstå:

Divisjon med null

index.cs

index.cs

copy
123456789101112131415161718
using System; class Program { static void Main(string[] args) { try { int a = 100; int b = 0; int result = a / b; } catch { Console.WriteLine("ERROR: Division by Zero."); } } }

Ugyldig indeks for en matrise eller en liste

index.cs

index.cs

copy
1234567891011121314151617
using System; class Program { static void Main(string[] args) { try { var exampleArray = new int[10]; Console.WriteLine(exampleArray[20]); } catch { Console.WriteLine("ERROR: The array index is out of bounds."); } } }

Nøkkel ikke funnet (for ordbøker):

index.cs

index.cs

copy
123456789101112131415161718192021
using System; using System.Collections.Generic; class Program { static void Main(string[] args) { try { Dictionary<string, string> myDict = new Dictionary<string, string> { { "key1", "value1" } }; Console.WriteLine(myDict["key2"]); } catch { Console.WriteLine("Error: Key not found"); } } }

Blokken finally

Det finnes også en valgfri kodeblokk kalt finally som kjøres etter at catch-blokken er kjørt:

index.cs

index.cs

copy
12345678910111213141516171819202122232425
using System; using System.Collections.Generic; class Program { static void Main(string[] args) { try { Dictionary<string, string> myDict = new Dictionary<string, string> { { "key1", "value1" } }; Console.WriteLine(myDict["key2"]); } catch { Console.WriteLine("Error: Key not found"); } finally { Console.WriteLine("This line will show after the error"); } } }

1. Hva vil være utdataene fra følgende program?

2. Hva er formålet med finally-blokken i C#?

3. Hvilket av følgende utsagn er sant om try-catch-blokken i C#?

question mark

Hva vil være utdataene fra følgende program?

Select the correct answer

question mark

Hva er formålet med finally-blokken i C#?

Select the correct answer

question mark

Hvilket av følgende utsagn er sant om try-catch-blokken i C#?

Select the correct answer

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 1. Kapittel 9

Spør AI

expand

Spør AI

ChatGPT

Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår

Suggested prompts:

Can you explain how the try-catch block works with an example?

What are some best practices for handling runtime errors?

Can you list other common runtime errors besides the ones mentioned?

Awesome!

Completion rate improved to 2.04

bookFeilhåndtering

Sveip for å vise menyen

Du har kanskje støtt på begrepet kjøretidsfeil i tidligere kapitler. En kjøretidsfeil er en feil som oppstår mens programmet kjører – derav navnet "kjøretidsfeil".

Vanligvis, når en kjøretidsfeil oppstår, krasjer programmet eller slutter å svare.

Kompilatoren kan hjelpe deg med å påpeke de fleste feilene i koden vår, men kjøretidsfeil er stort sett uforutsigbare og avhenger ofte av usikre parametere.

For eksempel, hvis filbanen som sendes inn i StreamReader er ugyldig eller ikke eksisterer, vil det oppstå en kjøretidsfeil og programmet vil krasje. Derfor kan vi ofte plassere slik risikabel kode i try-catch-blokker for å prøve noe kode, og hvis det feiler, fange og håndtere feilen i stedet for at programmet krasjer.

Følgende er syntaksen for en try-catch-blokk:

index.cs

index.cs

copy
1234567
try { // code to try } catch (Exception errorVar) { // code to handle error }

Her er Exception et nøkkelord som representerer datatypen Exception.

Eksempel

index.cs

index.cs

copy
1234567891011121314151617
using System; using System.IO; class Program { static void Main(string[] args) { try { new StreamWriter("C:/a/random/path/that/does/not/exist.txt"); } catch(Exception error) { Console.WriteLine(error.Message); } } }
Note
Merk

Vi kan utelate (Exception error)-delen fra catch-setningen hvis vi ikke bruker error.

Følgende er noen vanlige tilfeller hvor en kjøretidsfeil kan oppstå:

Divisjon med null

index.cs

index.cs

copy
123456789101112131415161718
using System; class Program { static void Main(string[] args) { try { int a = 100; int b = 0; int result = a / b; } catch { Console.WriteLine("ERROR: Division by Zero."); } } }

Ugyldig indeks for en matrise eller en liste

index.cs

index.cs

copy
1234567891011121314151617
using System; class Program { static void Main(string[] args) { try { var exampleArray = new int[10]; Console.WriteLine(exampleArray[20]); } catch { Console.WriteLine("ERROR: The array index is out of bounds."); } } }

Nøkkel ikke funnet (for ordbøker):

index.cs

index.cs

copy
123456789101112131415161718192021
using System; using System.Collections.Generic; class Program { static void Main(string[] args) { try { Dictionary<string, string> myDict = new Dictionary<string, string> { { "key1", "value1" } }; Console.WriteLine(myDict["key2"]); } catch { Console.WriteLine("Error: Key not found"); } } }

Blokken finally

Det finnes også en valgfri kodeblokk kalt finally som kjøres etter at catch-blokken er kjørt:

index.cs

index.cs

copy
12345678910111213141516171819202122232425
using System; using System.Collections.Generic; class Program { static void Main(string[] args) { try { Dictionary<string, string> myDict = new Dictionary<string, string> { { "key1", "value1" } }; Console.WriteLine(myDict["key2"]); } catch { Console.WriteLine("Error: Key not found"); } finally { Console.WriteLine("This line will show after the error"); } } }

1. Hva vil være utdataene fra følgende program?

2. Hva er formålet med finally-blokken i C#?

3. Hvilket av følgende utsagn er sant om try-catch-blokken i C#?

question mark

Hva vil være utdataene fra følgende program?

Select the correct answer

question mark

Hva er formålet med finally-blokken i C#?

Select the correct answer

question mark

Hvilket av følgende utsagn er sant om try-catch-blokken i C#?

Select the correct answer

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 1. Kapittel 9
some-alt