Exception handling
1. Unbehandelte Exceptions
Exceptions werden „geworfen“ (engl. throw). Wenn sie in der verursachenden Methoden nicht aufgefangen (engl. catch) und behandelt (engl. handling) werdem, so wird jeweils in der aufrufenden Methode danach gesucht. Falls überhaupt kein benutzerdefiniertes Exception handling im aktuellen Kontext existiert, wird die Exception erst von der .NET-Laufzeitumgebung gefangen. In diesem Fall wird das Programm angehalten und eine entsprechende Systemmeldung angezeigt, was unseren Qualitätsansprüchen nicht genügt!

Beispiel einer unbehandelten Exception
2. Exception handling (try-catch-Anweisung)
Der kritische Code steht im try-Anweisungsblock, die Exception wird typabhängig im catch-Anweisungsblock aufgefangen und behandelt:
- using System;
- using System.IO;
- namespace exceptionHandling
- {
- class Program
- {
- static void Main(string[] args)
- {
- ReadFile("fileDoesNotExist.txt");
- Console.ReadKey();
- }
- static void ReadFile(string fileName)
- {
- try
- {
- TextReader reader = new StreamReader(fileName); // wirft ev. Exception
- string line = reader.ReadLine();
- Console.WriteLine(line);
- reader.Close();
- Console.WriteLine("Datei wurde gelesen.");
- }
- catch (FileNotFoundException fnfe)
- {
- // Exception handler fuer FileNotFoundException
- Console.WriteLine("The file '{0}' is not found.", fileName); //tzerinfo
- }
- catch (IOException ioe)
- {
- // Exception handler fuer andere i/o-exceptions
- Console.WriteLine(ioe.Message); // Ausgabe des Stacktrace
- }
- }
- }
- }
Dabei muss die Exception-Hierarchie eingehalten werden:

Exception-Hierarchie
http://flylib.com/books/en/4.8.1.109/1/ (29.11.2018)