Fehleingaben erkennen

Fehler mit try-catch abfangen

Um einen reibungslosen Programmablauf zu gestalten, sollten Sie als Programmierer immer auch daran denken, alle möglichen Fehler (Fehleingaben) zu erkennen und diese abzufangen. Die try-catch-Anweisung erlaubt es, Fehler wie z.B. eine unerlaubte Division durch 0 im catch-Block abzufangen und ihr Programm vor einem Absturz zu bewahren.

Die try-catch-Anweisung besteht aus einem try-Block, welcher den zu überwachenden Codeteil enthält und aus einem oder auch mehreren catch-Blöcken, welche(r) die Ausnahme(n) behandelt.

Wird eine Exception (Ausnahme) ausgelöst, sucht die CLR (Common Language Runtime) nach der catch-Anweisung, die diese Ausnahme behandelt.

Das folgende Programmbeispiel zeigt die Ausnahmebehandlung einer Division durch 0. Im ersten Beispiel werden alle Exceptions abgefangen, im zweiten gezielt die Division durch 0. Grundsätzlich sollte jede Exception gezielt abgefangen werden.

 

namespace ConsoleApplication_try_catch
{
    class Program
    {
        static void Main(string[] args)
        {
            /* Hier werden ALLE Exceptions abgefangen */
            try
            {
                int x = 0;
                int y = 10;
                int ergebnis = y / x;   // Division durch 0 verursacht das Auslösen einer Exception
            }

            catch (Exception ex)        // Fängt ALLE Exceptions ab
            {
                Console.WriteLine("Eine Exception ist aufgetreten!");
            }
            Console.ReadLine();

            /* Hier wird gezielt die Exception Division durch 0 abgefangen */
            try
            {
                int x = 0;
                int y = 10;
                int ergebnis = y / x;   // Division durch 0 verursacht das Auslösen einer Exception
            }

            catch (DivideByZeroException ex)        // Fängt gezielt eine Division durch 0 Exception ab
            {
                Console.WriteLine("Eine Division / 0 ist aufgetreten!");
            }
            Console.ReadLine();
        }
    }
}

 

try, catch und finally

Der finally-Block gibt alle Ressourcen frei, die im try-Block reserviert wurden, und führt den Code aus (z.B. das Schließen einer Datei oder Datenbank), der trotz Eintreten einer Ausnahme ausgeführt werden soll.

Der finally-Block wird immer ausgeführt, unabhängig davon, wie der try-Block beendet wird.

 

namespace ConsoleApplication_try_catch
{
    class Program
    {
        static void Main(string[] args)
        {
            /* Hier werden ALLE Exceptions abgefangen */
            try
            {
                int x = 0;
                int y = 10;
                int ergebnis = y / x;   // Division durch 0 verursacht das Auslösen einer Exception
            }

            catch (DivideByZeroException ex)        // Fängt gezielt eine Division dur 0 Exception ab
            {
                Console.WriteLine("Eine Division / 0 ist aufgetreten!");
                Console.WriteLine("Fehlermeldung: " + ex);      // Ausgabe der genauen Fehlermeldung
            }

            finally
            {
                Console.WriteLine("finally wird immer ausgeführt und schließt z.B. eine Datenbank usw.");
            }

            Console.ReadLine();
        }
    }
}