Vorgehensweise: Erstellen benutzerdefinierter Ausnahmen mit lokalisierten AusnahmemeldungenHow to create user-defined exceptions with localized exception messages

In diesem Artikel erfahren Sie, wie Sie benutzerdefinierte Ausnahmen mit lokalisierten Ausnahmemeldungen mithilfe von Satellitenassemblys erstellen, die von der Basisklasse Exception geerbt werden.In this article, you will learn how to create user-defined exceptions that are inherited from the base Exception class with localized exception messages using satellite assemblies.

Erstellen benutzerdefinierter AusnahmenCreate custom exceptions

.NET enthält viele verschiedene Ausnahmen, die Sie verwenden können..NET contains many different exceptions that you can use. In einigen Fällen, in denen keine von ihnen Ihre Anforderungen erfüllt, können Sie jedoch auch eigene benutzerdefinierte Ausnahmen erstellen.However, in some cases when none of them meets your needs, you can create your own custom exceptions.

Angenommen, Sie möchten eine StudentNotFoundException erstellen, die eine StudentName-Eigenschaft enthält.Let's assume you want to create a StudentNotFoundException that contains a StudentName property. Führen Sie die folgenden Schritte aus, um eine benutzerdefinierte Ausnahme zu erstellen:To create a custom exception, follow these steps:

  1. Erstellen Sie eine serialisierbare Klasse, die von Exception erbt.Create a serializable class that inherits from Exception. Der Klassenname muss auf „Exception“ enden:The class name should end in "Exception":

    [Serializable]
    public class StudentNotFoundException : Exception { }
    
    <Serializable>
    Public Class StudentNotFoundException
        Inherits Exception
    End Class
    
  2. Fügen Sie die Standardkonstruktoren hinzu:Add the default constructors:

    [Serializable]
    public class StudentNotFoundException : Exception
    {
        public StudentNotFoundException() { }
    
        public StudentNotFoundException(string message)
            : base(message) { }
    
        public StudentNotFoundException(string message, Exception inner)
            : base(message, inner) { }
    }
    
    <Serializable>
    Public Class StudentNotFoundException
        Inherits Exception
    
        Public Sub New()
        End Sub
    
        Public Sub New(message As String)
            MyBase.New(message)
        End Sub
    
        Public Sub New(message As String, inner As Exception)
            MyBase.New(message, inner)
        End Sub
    End Class
    
  3. Definieren Sie alle zusätzlichen Eigenschaften und Konstruktoren:Define any additional properties and constructors:

    [Serializable]
    public class StudentNotFoundException : Exception
    {
        public string StudentName { get; }
    
        public StudentNotFoundException() { }
    
        public StudentNotFoundException(string message)
            : base(message) { }
    
        public StudentNotFoundException(string message, Exception inner)
            : base(message, inner) { }
    
        public StudentNotFoundException(string message, string studentName)
            : this(message)
        {
            StudentName = studentName;
        }
    }
    
    <Serializable>
    Public Class StudentNotFoundException
        Inherits Exception
    
        Public ReadOnly Property StudentName As String
    
        Public Sub New()
        End Sub
    
        Public Sub New(message As String)
            MyBase.New(message)
        End Sub
    
        Public Sub New(message As String, inner As Exception)
            MyBase.New(message, inner)
        End Sub
    
        Public Sub New(message As String, studentName As String)
            Me.New(message)
            StudentName = studentName
        End Sub
    End Class
    

Erstellen lokalisierter AusnahmemeldungenCreate localized exception messages

Sie haben eine benutzerdefinierte Ausnahme erstellt, und Sie können sie an beliebiger Stelle mit Code wie dem folgenden auslösen:You have created a custom exception, and you can throw it anywhere with code like the following:

throw new StudentNotFoundException("The student cannot be found.", "John");
Throw New StudentNotFoundException("The student cannot be found.", "John")

Das Problem mit der vorherigen Zeile besteht darin, dass "The student cannot be found." nur eine konstante Zeichenfolge ist.The problem with the previous line is that "The student cannot be found." is just a constant string. In einer lokalisierten Anwendung möchten Sie abhängig von der Benutzerkultur verschiedene Meldungen verwenden.In a localized application, you want to have different messages depending on user culture. Satellitenassemblys bieten eine gute Möglichkeit dazu.Satellite Assemblies are a good way to do that. Eine Satellitenassembly ist eine DLL-Datei, die Ressourcen für eine bestimmte Sprache enthält.A satellite assembly is a .dll that contains resources for a specific language. Wenn Sie zur Laufzeit eine bestimmte Ressource anfordern, ermittelt die CLR diese Ressource abhängig von der Benutzerkultur.When you ask for a specific resources at run time, the CLR finds that resource depending on user culture. Wenn keine Satellitenassembly für diese Kultur gefunden wird, werden die Ressourcen der Standardkultur verwendet.If no satellite assembly is found for that culture, the resources of the default culture are used.

So erstellen Sie lokalisierte Ausnahmemeldungen:To create the localized exception messages:

  1. Erstellen Sie einen neuen Ordner mit dem Namen Resources, um darin Ressourcendateien zu speichern.Create a new folder named Resources to hold the resource files.

  2. Fügen Sie diesem Ordner eine neue Ressourcendatei hinzu.Add a new resource file to it. Um dies in Visual Studio auszuführen, klicken Sie mit der rechten Maustaste auf den Ordner im Projektmappen-Explorer, und wählen Sie dann Hinzufügen > Neues Element > Ressourcendatei aus.To do that in Visual Studio, right-click the folder in Solution Explorer, and select Add > New Item > Resources File. Nennen Sie die Datei ExceptionMessages.resx.Name the file ExceptionMessages.resx. Dies ist die Standardressourcendatei.This is the default resources file.

  3. Fügen Sie ein Name-Wert-Paar für die Ausnahmemeldung hinzu, wie in der folgenden Abbildung gezeigt:Add a name/value pair for your exception message, like the following image shows:

    Hinzufügen von Ressourcen zur Standardkultur

  4. Fügen Sie eine neue Ressourcendatei für Französisch hinzu.Add a new resource file for French. Nennen Sie sie ExceptionMessages.fr-FR.resx.Name it ExceptionMessages.fr-FR.resx.

  5. Fügen Sie erneut ein Name-Wert-Paar für die Ausnahmemeldung hinzu, aber mit einem französischen Wert:Add a name/value pair for the exception message again, but with a French value:

    Hinzufügen von Ressourcen zur Kultur „fr-FR“

  6. Nachdem Sie das Projekt erstellt haben, sollte der Buildausgabeordner den Ordner fr-FR mit einer DLL-Datei enthalten, bei der es sich um die Satellitenassembly handelt.After you build the project, the build output folder should contain the fr-FR folder with a .dll file, which is the satellite assembly.

  7. Sie lösen die Ausnahme mit Code wie dem folgenden aus:You throw the exception with code like the following:

    var resourceManager = new ResourceManager("FULLY_QIALIFIED_NAME_OF_RESOURCE_FILE", Assembly.GetExecutingAssembly());
    throw new StudentNotFoundException(resourceManager.GetString("StudentNotFound"), "John");
    

    Hinweis

    Wenn der Projektname TestProject lautet und die Ressourcendatei ExceptionMessages.resx im Ordner Resources des Projekts gespeichert ist, lautet der vollqualifizierte Name der Ressourcendatei TestProject.Resources.ExceptionMessages.If the project name is TestProject and the resource file ExceptionMessages.resx resides in the Resources folder of the project, the fully qualified name of the resource file is TestProject.Resources.ExceptionMessages.

Siehe auchSee also