Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Herausforderung: Fehlerbehandlung | Datenstrukturen & Dateiverarbeitung
C# Jenseits der Grundlagen

Herausforderung: Fehlerbehandlung

Swipe um das Menü anzuzeigen

Die try-catch-Syntax verfügt über eine zusätzliche Möglichkeit, mit der bestimmte Fehlertypen gezielt abgefangen und separat behandelt werden können:

index.cs

index.cs

1234567891011121314151617
try { // code } catch (ExceptionType errorVarName) { // code } catch (ExceptionType errorVarName) { // code } ... finally { // code }

Der Typ Exception, der im vorherigen Kapitel verwendet wurde, fängt alle Arten von Fehlern ab. Es gibt jedoch einige Untertypen von Exception, die spezifischere Fehler abfangen. Zu den häufigsten Exception-Typen gehören:

  1. DivideByZeroException: Es liegt eine Division durch Null vor;
  2. FileNotFoundException: Die angeforderte Datei existiert nicht;
  3. KeyNotFoundException: Der Schlüssel im Dictionary existiert nicht;
  4. IndexOutOfRangeException: Der angegebene Index eines Arrays oder einer Liste ist ungültig.

Der Begriff errorVarName bezeichnet eine Variable, die das Exception-Objekt speichert und Informationen wie die Fehlermeldung enthält, auf die über errorVarName.Message zugegriffen werden kann. Dies kann weggelassen werden, wenn es nicht verwendet wird:

index.cs

index.cs

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

Hier ist ein Beispiel für die Verwendung eines solchen try-catch-Blocks:

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; } } } }

Nutzen Sie nun diese Konzepte. Ergänzen Sie die Lücken mit den passenden Ausnahmetypen im folgenden Code, um die Aufgabe abzuschließen.

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"); } } } }

Verwenden Sie für jeden catch-Block den entsprechenden Ausnahmetyp. Lesen Sie den Code und verstehen Sie, welcher catch-Block am besten geeignet ist, um einen bestimmten Ausnahmetyp zu behandeln.

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"); } } } }
War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 1. Kapitel 7

Fragen Sie AI

expand

Fragen Sie AI

ChatGPT

Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen

Abschnitt 1. Kapitel 7
some-alt