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
Quizzes & Challenges
Quizzes
Challenges
/
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.

Kompilatoren 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 viser syntaksen for en try-catch blok:

index.cs

index.cs

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

Her er Exception et nøgleord, der 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 catch-blokken er blevet kørt. finally-blokken vil altid blive udført efter både try- og catch-blokkene, uanset om der blev kastet en undtagelse eller ej. Dette garanterer, at enhver kode i finally altid køres, hvilket gør den nyttig til opgaver som at lukke filer eller frigive ressourcer.

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

Suggested prompts:

What are some other examples of runtime errors?

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

What is the difference between compile-time and runtime errors?

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.

Kompilatoren 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 viser syntaksen for en try-catch blok:

index.cs

index.cs

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

Her er Exception et nøgleord, der 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 catch-blokken er blevet kørt. finally-blokken vil altid blive udført efter både try- og catch-blokkene, uanset om der blev kastet en undtagelse eller ej. Dette garanterer, at enhver kode i finally altid køres, hvilket gør den nyttig til opgaver som at lukke filer eller frigive ressourcer.

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