Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Udfordring: Fejlhåndtering | Datastrukturer og Filhåndtering
C# Ud Over Det Grundlæggende

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

index.cs

1234567891011121314151617
try { // 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:

  1. DivideByZeroException: der er en division med nul;
  2. FileNotFoundException: filen, der forsøges tilgået, eksisterer ikke;
  3. KeyNotFoundException: ordbogs-nøglen eksisterer ikke;
  4. 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

index.cs

12345678910111213
try { // code } catch (ExceptionType) { // code } ... finally { // code }

Her er et eksempel på brug af denne type try-catch blok:

index.cs

index.cs

123456789101112131415161718192021222324252627
using 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

index.cs

1234567891011121314151617181920212223242526272829303132333435
using 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

index.cs

1234567891011121314151617181920212223242526272829303132333435
using 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"); } } } }
Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 1. Kapitel 7

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

Sektion 1. Kapitel 7
some-alt