C# Ausnahmen - Try..Catch
C# Ausnahmen
Bei der Ausführung von C#-Code können unterschiedliche Fehler auftreten: Codierungsfehler des Programmierers, Fehler aufgrund falscher Eingaben oder andere unvorhersehbare Dinge.
Wenn ein Fehler auftritt, stoppt C# normalerweise und generiert eine Fehlermeldung. Der Fachbegriff dafür lautet: C# löst eine Ausnahme (einen Fehler) aus.
C# try und catch
Mit der try
-Anweisung können Sie einen Codeblock definieren, der während der Ausführung auf Fehler getestet wird.
Mit der catch
-Anweisung können Sie einen Codeblock definieren, der ausgeführt wird, wenn im try-Block ein Fehler auftritt.
Die Schlüsselwörter try
und catch
kommen paarweise vor:
Syntax
try
{
// Codeblock zum Ausprobieren
}
catch (Exception e)
{
// Codeblock zur Fehlerbehandlung
}
Betrachten Sie das folgende Beispiel, in dem wir ein Array aus drei Ganzzahlen erstellen:
Dadurch wird ein Fehler generiert, da myNumbers[10] nicht existiert.
int[] myNumbers = {1, 2, 3};
Console.WriteLine(myNumbers[10]); // error!
Die Fehlermeldung wird etwa so aussehen:
System.IndexOutOfRangeException: 'Index was outside the bounds of the array.'
Wenn ein Fehler auftritt, können wir try...catch
verwenden, um den Fehler abzufangen und Code zur Behebung auszuführen.
Im folgenden Beispiel verwenden wir die Variable innerhalb des Catch-Blocks (e
) zusammen mit der integrierten Message
-Eigenschaft, die eine Meldung ausgibt, die die Ausnahme beschreibt:
Beispiel
try
{
int[] myNumbers = {1, 2, 3};
Console.WriteLine(myNumbers[10]);
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
Die Ausgabe wird sein:
Index was outside the bounds of the array.
Sie können auch eine eigene Fehlermeldung ausgeben:
Beispiel
try
{
int[] myNumbers = {1, 2, 3};
Console.WriteLine(myNumbers[10]);
}
catch (Exception e)
{
Console.WriteLine("Something went wrong.");
}
Die Ausgabe wird sein:
Something went wrong.
Finally
Mit der Anweisung finally
können Sie Code unabhängig vom Ergebnis nach try...catch
ausführen:
Beispiel
try
{
int[] myNumbers = {1, 2, 3};
Console.WriteLine(myNumbers[10]);
}
catch (Exception e)
{
Console.WriteLine("Something went wrong.");
}
finally
{
Console.WriteLine("The 'try catch' is finished.");
}
Die Ausgabe wird sein:
Something went wrong.
The 'try catch' is finished.
Das Schlüsselwort throw
Mit der throw
-Anweisung können Sie einen benutzerdefinierten Fehler erstellen.
Die throw
-Anweisung wird zusammen mit einer Ausnahmeklasse verwendet. In C# sind viele Ausnahmeklassen verfügbar: ArithmeticException
, FileNotFoundException
, IndexOutOfRangeException
, TimeOutException
, etc:
Beispiel
static void checkAge(int age)
{
if (age < 18)
{
throw new ArithmeticException("Access denied - You must be at least 18 years old.");
}
else
{
Console.WriteLine("Access granted - You are old enough!");
}
}
static void Main(string[] args)
{
checkAge(15);
}
Die im Programm angezeigte Fehlermeldung lautet:
System.ArithmeticException: 'Access denied - You must be at least 18 years old.'
Wenn age
20 wäre, würden Sie keine Ausnahme erhalten:
Beispiel
checkAge(20);
Die Ausgabe wird sein:
Access granted - You are old enough!