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.
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
1234567try { // code to try } catch (Exception errorVar) { // code to handle error }
Her er Exception
et nøgleord, som 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 at catch
-blokken er blevet udført:
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
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.
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
1234567try { // code to try } catch (Exception errorVar) { // code to handle error }
Her er Exception
et nøgleord, som 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 at catch
-blokken er blevet udført:
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!