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

bookHerausforderung: Fehlerbehandlung

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

copy
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

copy
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

copy
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

copy
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

copy
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 10

Fragen Sie AI

expand

Fragen Sie AI

ChatGPT

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

Suggested prompts:

What are the correct exception types to fill in the blanks?

Can you explain why each exception type is used in this context?

Can you give more examples of specific exception types?

Awesome!

Completion rate improved to 2.04

bookHerausforderung: 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

copy
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

copy
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

copy
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

copy
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

copy
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 10
some-alt