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

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