Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Fejlhåndtering | Datastrukturer og Filhåndtering
C# Ud Over Det Grundlæggende

bookFejlhåndtering

Du er måske stødt på udtrykket runtime error i tidligere kapitler. En runtime error er en fejl, der opstår mens programmet kører – deraf navnet "runtime" fejl.

Normalt, når en runtime-fejl opstår, går programmet ned eller holder op med at svare.

Kompileren kan hjælpe dig ved at påpege de fleste fejl i vores kode, men runtime-fejl er for det meste uforudsigelige og afhænger ofte af usikre parametre.

For eksempel, hvis filstien, der gives til StreamReader, er ugyldig eller ikke eksisterer, vil det give en runtime-fejl, og programmet vil gå ned. Derfor kan vi ofte placere sådan farlig kode i try-catch blokke for at prøve noget kode, og hvis det fejler, fange og håndtere fejlen i stedet for at få programmet til at gå ned.

Følgende er syntaksen for try-catch blokken:

index.cs

index.cs

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

Her er Exception et nøgleord, som repræsenterer 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
Bemærk

Vi kan udelade (Exception error)-delen fra catch-sætningen, hvis vi ikke bruger error.

Følgende er nogle almindelige tilfælde, hvor en runtime-fejl kan opstå:

Division med nul

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 et array 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øgle ikke fundet (for ordbøger):

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

Der findes også en valgfri kodeblok kaldet finally, som udføres efter at catch-blokken er blevet udfø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. Hvad vil outputtet være for følgende program?

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

3. Hvilket af følgende udsagn er sandt vedrørende try-catch-blokken i C#?

question mark

Hvad vil outputtet være for følgende program?

Select the correct answer

question mark

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

Select the correct answer

question mark

Hvilket af følgende udsagn er sandt vedrørende try-catch-blokken i C#?

Select the correct answer

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 1. Kapitel 9

Spørg AI

expand

Spørg AI

ChatGPT

Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat

Awesome!

Completion rate improved to 2.04

bookFejlhåndtering

Stryg for at vise menuen

Du er måske stødt på udtrykket runtime error i tidligere kapitler. En runtime error er en fejl, der opstår mens programmet kører – deraf navnet "runtime" fejl.

Normalt, når en runtime-fejl opstår, går programmet ned eller holder op med at svare.

Kompileren kan hjælpe dig ved at påpege de fleste fejl i vores kode, men runtime-fejl er for det meste uforudsigelige og afhænger ofte af usikre parametre.

For eksempel, hvis filstien, der gives til StreamReader, er ugyldig eller ikke eksisterer, vil det give en runtime-fejl, og programmet vil gå ned. Derfor kan vi ofte placere sådan farlig kode i try-catch blokke for at prøve noget kode, og hvis det fejler, fange og håndtere fejlen i stedet for at få programmet til at gå ned.

Følgende er syntaksen for try-catch blokken:

index.cs

index.cs

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

Her er Exception et nøgleord, som repræsenterer 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
Bemærk

Vi kan udelade (Exception error)-delen fra catch-sætningen, hvis vi ikke bruger error.

Følgende er nogle almindelige tilfælde, hvor en runtime-fejl kan opstå:

Division med nul

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 et array 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øgle ikke fundet (for ordbøger):

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

Der findes også en valgfri kodeblok kaldet finally, som udføres efter at catch-blokken er blevet udfø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. Hvad vil outputtet være for følgende program?

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

3. Hvilket af følgende udsagn er sandt vedrørende try-catch-blokken i C#?

question mark

Hvad vil outputtet være for følgende program?

Select the correct answer

question mark

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

Select the correct answer

question mark

Hvilket af følgende udsagn er sandt vedrørende try-catch-blokken i C#?

Select the correct answer

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 1. Kapitel 9
some-alt