Fehlerbehandlung
Möglicherweise sind Sie in früheren Kapiteln auf den Begriff Laufzeitfehler gestoßen. Ein Laufzeitfehler ist ein Fehler, der während der Programmausführung auftritt – daher der Name "Laufzeit"fehler.
In der Regel stürzt das Programm ab oder reagiert nicht mehr, wenn ein Laufzeitfehler auftritt.
Der Compiler kann die meisten Fehler im Code erkennen, aber Laufzeitfehler sind meist unvorhersehbar und hängen oft von unsicheren Parametern ab.
Wenn zum Beispiel der an StreamReader übergebene Dateipfad ungültig ist oder nicht existiert, tritt ein Laufzeitfehler auf und das Programm stürzt ab. Daher kann man solchen riskanten Code häufig in try-catch-Blöcke setzen, um den Code auszuprobieren und im Fehlerfall den Fehler abzufangen und zu behandeln, anstatt das Programm abstürzen zu lassen.
Nachfolgend die Syntax des try-catch-Blocks:
index.cs
1234567try { // code to try } catch (Exception errorVar) { // code to handle error }
Hier ist Exception ein Schlüsselwort, das den Datentyp Exception repräsentiert.
Beispiel
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); } } }
Wir können den Teil (Exception error) aus der catch-Anweisung weglassen, wenn wir error nicht verwenden.
Im Folgenden sind einige häufige Fälle aufgeführt, in denen ein Laufzeitfehler auftreten kann:
Division durch Null
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."); } } }
Ungültiger Index eines Arrays oder einer 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."); } } }
Schlüssel nicht gefunden (bei Dictionaries):
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"); } } }
Der finally-Block
Es gibt auch einen optionalen Codeblock namens finally, der nach Ausführung des catch-Blocks ausgeführt wird. Der finally-Block wird immer nach den Blöcken try und catch ausgeführt, unabhängig davon, ob eine Ausnahme ausgelöst wurde oder nicht. Dies garantiert, dass jeder Code im finally-Block immer ausgeführt wird, was ihn nützlich für Aufgaben wie das Schließen von Dateien oder das Freigeben von Ressourcen macht.
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. Was ist die Ausgabe des folgenden Programms?
2. Welchen Zweck hat der finally-Block in C#?
3. Welche der folgenden Aussagen trifft auf den try-catch-Block in C# zu?
Danke für Ihr Feedback!
Fragen Sie AI
Fragen Sie AI
Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen
What are some other examples of runtime errors?
Can you explain how the try-catch block works with a code example?
What is the difference between compile-time and runtime errors?
Awesome!
Completion rate improved to 2.04
Fehlerbehandlung
Swipe um das Menü anzuzeigen
Möglicherweise sind Sie in früheren Kapiteln auf den Begriff Laufzeitfehler gestoßen. Ein Laufzeitfehler ist ein Fehler, der während der Programmausführung auftritt – daher der Name "Laufzeit"fehler.
In der Regel stürzt das Programm ab oder reagiert nicht mehr, wenn ein Laufzeitfehler auftritt.
Der Compiler kann die meisten Fehler im Code erkennen, aber Laufzeitfehler sind meist unvorhersehbar und hängen oft von unsicheren Parametern ab.
Wenn zum Beispiel der an StreamReader übergebene Dateipfad ungültig ist oder nicht existiert, tritt ein Laufzeitfehler auf und das Programm stürzt ab. Daher kann man solchen riskanten Code häufig in try-catch-Blöcke setzen, um den Code auszuprobieren und im Fehlerfall den Fehler abzufangen und zu behandeln, anstatt das Programm abstürzen zu lassen.
Nachfolgend die Syntax des try-catch-Blocks:
index.cs
1234567try { // code to try } catch (Exception errorVar) { // code to handle error }
Hier ist Exception ein Schlüsselwort, das den Datentyp Exception repräsentiert.
Beispiel
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); } } }
Wir können den Teil (Exception error) aus der catch-Anweisung weglassen, wenn wir error nicht verwenden.
Im Folgenden sind einige häufige Fälle aufgeführt, in denen ein Laufzeitfehler auftreten kann:
Division durch Null
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."); } } }
Ungültiger Index eines Arrays oder einer 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."); } } }
Schlüssel nicht gefunden (bei Dictionaries):
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"); } } }
Der finally-Block
Es gibt auch einen optionalen Codeblock namens finally, der nach Ausführung des catch-Blocks ausgeführt wird. Der finally-Block wird immer nach den Blöcken try und catch ausgeführt, unabhängig davon, ob eine Ausnahme ausgelöst wurde oder nicht. Dies garantiert, dass jeder Code im finally-Block immer ausgeführt wird, was ihn nützlich für Aufgaben wie das Schließen von Dateien oder das Freigeben von Ressourcen macht.
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. Was ist die Ausgabe des folgenden Programms?
2. Welchen Zweck hat der finally-Block in C#?
3. Welche der folgenden Aussagen trifft auf den try-catch-Block in C# zu?
Danke für Ihr Feedback!