Fejlhå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
1234567try { // code to try } catch (Exception errorVar) { // code to handle error }
Her er Exception et nøgleord, der repræsenterer datatypen Exception.
Eksempel
index.cs
1234567891011121314151617using 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); } } }
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
123456789101112131415161718using 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
1234567891011121314151617using 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
123456789101112131415161718192021using 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
12345678910111213141516171819202122232425using 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#?
Tak for dine kommentarer!
Spørg AI
Spørg AI
Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat
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
Fejlhå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
1234567try { // code to try } catch (Exception errorVar) { // code to handle error }
Her er Exception et nøgleord, der repræsenterer datatypen Exception.
Eksempel
index.cs
1234567891011121314151617using 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); } } }
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
123456789101112131415161718using 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
1234567891011121314151617using 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
123456789101112131415161718192021using 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
12345678910111213141516171819202122232425using 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#?
Tak for dine kommentarer!