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!
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