Udfordring: Fejlhåndtering
Stryg for at vise menuen
try-catch-syntaksen har en yderligere syntaks, som gør det muligt at fange specifikke typer af fejl og håndtere dem separat:
index.cs
1234567891011121314151617try { // code } catch (ExceptionType errorVarName) { // code } catch (ExceptionType errorVarName) { // code } ... finally { // code }
Typen Exception, som blev brugt i det forrige kapitel, opfanger alle former for fejl, men der findes nogle undertyper af Exception, som opfanger mere specifikke typer af fejl. Følgende er nogle almindelige exception-typer:
DivideByZeroException: der er en division med nul;FileNotFoundException: filen, der forsøges tilgået, eksisterer ikke;KeyNotFoundException: ordbogs-nøglen eksisterer ikke;IndexOutOfRangeException: det angivne indeks for et array eller en liste er ugyldigt.
Udtrykket errorVarName er en variabel, der gemmer Exception-objektet og indeholder information som fejlbeskeden, der kan tilgås via errorVarName.Message. Dette kan udelades, hvis det ikke benyttes:
index.cs
12345678910111213try { // code } catch (ExceptionType) { // code } ... finally { // code }
Her er et eksempel på brug af denne type try-catch blok:
index.cs
123456789101112131415161718192021222324252627using System; class Program { static void Main(string[] args) { int[] myArray = { 0, 2, 4, 6, 8, 10 }; int i = 0; while (true) { try { Console.Write(myArray[i] / i + " "); i++; } catch(DivideByZeroException) { i++; } catch(IndexOutOfRangeException) { break; } } } }
Brug nu disse koncepter. Udfyld de tomme felter med relevante undtagelsestyper i følgende kode for at fuldføre udfordringen.
index.cs
1234567891011121314151617181920212223242526272829303132333435using System; using System.Collections.Generic; class Program { static void Main(string[] args) { int[] numbers = { 1, 2, 5, 7, 9 }; var numberNames = new Dictionary<int, string>(); numberNames.Add(1, "One"); numberNames.Add(2, "Two"); numberNames.Add(5, "Five"); numberNames.Add(9, "Nine"); int i = 0; while (true) { try { int key = numbers[i]; Console.WriteLine($"{key} is {numberNames[key]}"); i++; } catch (___) { break; } catch (___) { numberNames.Add(7, "Seven"); } } } }
Brug den relevante undtagelsestype for hver catch-blok. Læs koden og forstå, hvilken catch-blok der er mest passende til at håndtere en bestemt type undtagelse.
index.cs
1234567891011121314151617181920212223242526272829303132333435using System; using System.Collections.Generic; public class HelloWorld { public static void Main(string[] args) { int[] numbers = { 1, 2, 5, 7, 9 }; var numberNames = new Dictionary<int, string>(); numberNames.Add(1, "One"); numberNames.Add(2, "Two"); numberNames.Add(5, "Five"); numberNames.Add(9, "Nine"); int i = 0; while (true) { try { int key = numbers[i]; Console.WriteLine($"{key} is {numberNames[key]}"); i++; } catch (IndexOutOfRangeException) { break; } catch (KeyNotFoundException) { numberNames.Add(7, "Seven"); } } } }
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