====== 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);