====== Fehlerbehandlung ======
Während eines Programmablaufes können Fehler auftreten -- sogenannte Ausnahmen (engl. //exceptions//). Vergleiche auch [[http://openbook.rheinwerk-verlag.de/visual_csharp_2012/1997_07_001.html|Kapitel 7.1 aus Visual C# 2012]].
Wenn eine Anweisung läuft und etwas schief geht, wirft ein Methodenaufruf eine Exception an den Aufrufer. Lasse den folgenden Quelltext laufen und versuche eine Exception auszulösen.
int iEingangA;
int iEingangB;
string nutzereingabe;
Console.WriteLine("Bitte geben Sie den Wert für Eingang A an:");
nutzereingabe = Console.ReadLine();
iEingangA = Convert.ToInt32(nutzereingabe);
Console.WriteLine("Bitte geben Sie den Wert für Eingang B an:");
nutzereingabe = Console.ReadLine();
iEingangB = Convert.ToInt32(nutzereingabe);
Wenn eine Exception aufgetreten ist (man sagt, sie wurde "geworfen"), kann sie behandelt werden, indem man sie auffängt. Dies geschieht mit einem ''try-catch''-Block. Versuche mit Hilfe eines [[Debugging|Debuggers]] den folgenden Quelltext schrittweise nachzuvollziehen.
// In welcher Reihenfolge werden die folgenden Zeilen ausgeführt?
// Kontrollieren Sie ihre Angabe mit dem Debugger.
// Welche Ausgabe wurde erzeugt?
double d = 0;
try
{
d = Convert.ToDouble("Fünundzwanzig");
d = d * 2;
}
catch (FormatException ex)
{
Console.WriteLine("Im Catch-Block: " + ex.Message);
}
Console.WriteLine("d= " + d);
Und noch ein weiteres Beispiel.
// In welcher Reihenfolge werden die folgenden Zeilen ausgeführt?
// Kontrollieren Sie ihre Angabe mit dem Debugger.
// Welche Ausgabe wurde erzeugt?
double d = 0;
try
{
d = Convert.ToDouble("25");
d = d * 2;
}
catch (FormatException ex)
{
Console.WriteLine("Im Catch-Block: " + ex.Message);
}
Console.WriteLine("d= " + d);
Schließlich ein drittes Beispiel mit mehreren ''catch''-Blöcken. Hier können Fehler nach ihrer Art unterschieden werden.
// In welcher Reihenfolge werden die folgenden Zeilen ausgeführt?
// Kontrollieren Sie ihre Angabe mit dem Debugger.
// Welche Ausgabe wurde erzeugt?
double d = 0;
try
{
d = Convert.ToDouble("25");
d = d * 2;
}
catch (FormatException ex)
{
Console.WriteLine("Im Catch-Block");
}
catch (System.Net.Mail.SmtpException)
{
Console.WriteLine("Im Catch-Block der SMTP Exception");
}
Console.WriteLine("d= " + d);