Verwenden des try/catch-Blocks zum Abfangen von AusnahmenHow to use the try/catch block to catch exceptions

Platzieren Sie alle Codeanweisungen, die zu einer Ausnahme führen könnten in einen try-Block, und platzieren Sie Anweisungen, die für Ausnahmen verwendet werden oder die Ausnahmen selbst in einen oder mehrere catch-Blöcke unterhalb des try-Blocks.Place any code statements that might raise or throw an exception in a try block, and place statements used to handle the exception or exceptions in one or more catch blocks below the try block. Jeder catch-Block beinhaltet den Ausnahmetyp und kann zusätzliche Anweisungen beinhalten, die für diesen Ausnahmetyp benötigt werden.Each catch block includes the exception type and can contain additional statements needed to handle that exception type.

Im folgenden Beispiel öffnet ein StreamReader eine Datei namens data.txt und ruft eine Zeile daraus ab.In the following example, a StreamReader opens a file called data.txt and retrieves a line from the file. Da der Code möglicherweise eine der drei Ausnahmen auslöst, wird er in einen try-Block platziert.Since the code might throw any of three exceptions, it's placed in a try block. Drei catch-Blöcke fangen die Ausnahmen ab und verarbeiten sie, indem sie die Ergebnisse in der Konsole anzeigen.Three catch blocks catch the exceptions and handle them by displaying the results to the console.

using System;
using System.IO;

public class ProcessFile
{
    public static void Main()
    {
        try
        {
            using (StreamReader sr = File.OpenText("data.txt"))
            {
                Console.WriteLine($"The first line of this file is {sr.ReadLine()}");
            }
        }
        catch (FileNotFoundException e)
        {
            Console.WriteLine($"The file was not found: '{e}'");
        }
        catch (DirectoryNotFoundException e)
        {
            Console.WriteLine($"The directory was not found: '{e}'");
        }
        catch (IOException e)
        {
            Console.WriteLine($"The file could not be opened: '{e}'");
        }
    }
}
Imports System.IO

Public Class ProcessFile
    Public Shared Sub Main()
        Try
            Using sr As StreamReader = File.OpenText("data.txt")
                Console.WriteLine($"The first line of this file is {sr.ReadLine()}")
            End Using
        Catch e As FileNotFoundException
            Console.WriteLine($"The file was not found: '{e}'")
        Catch e As DirectoryNotFoundException
            Console.WriteLine($"The directory was not found: '{e}'")
        Catch e As IOException
            Console.WriteLine($"The file could not be opened: '{e}'")
        End Try
    End Sub
End Class

Die Common Language Runtime (CLR) fängt Ausnahmen ab, die nicht von den catch-Blöcken verarbeitet wurden.The Common Language Runtime (CLR) catches exceptions not handled by catch blocks. Wenn eine Ausnahme von einer CLR abgefangen wird, führt dies zu einem der folgenden möglichen Ergebnisse, je nachdem, wie die CLR konfiguriert wurde:If an exception is caught by the CLR, one of the following results may occur depending on your CLR configuration:

  • Ein Dialogfeld Debuggen wird angezeigt.A Debug dialog box appears.
  • Das Programm beendet die Ausführung, und ein Dialogfeld mit Informationen über die Ausnahme wird angezeigt.The program stops execution and a dialog box with exception information appears.
  • Im Standardausgabestream für Fehler wird ein Fehler ausgegeben.An error prints out to the standard error output stream.

Hinweis

Die meisten Codes können eine Ausnahme auslösen, und einige Ausnahmen, z.B. OutOfMemoryException, können auch jederzeit von der CRL selbst ausgelöst werden.Most code can throw an exception, and some exceptions, like OutOfMemoryException, can be thrown by the CLR itself at any time. Während Anwendungen diese Ausnahmen nicht behandeln müssen, sollte diese Möglichkeit beim Schreiben von Bibliotheken, die von anderen Anwendungen verwendet werden sollen, allerdings berücksichtigen werden.While applications aren't required to deal with these exceptions, be aware of the possibility when writing libraries to be used by others. Vorschläge dazu, wann Sie Code in einentry -Block platzieren sollten, finden Sie unter Bewährte Methoden für Ausnahmen.For suggestions on when to set code in a try block, see Best Practices for Exceptions.

Siehe auchSee also

AusnahmenExceptions
Behandeln von E/A-Fehlern in .NETHandling I/O errors in .NET