Vorgehensweise: Erstellen benutzerdefinierter Ausnahmen mit lokalisierten Ausnahmemeldungen
In diesem Artikel erfahren Sie, wie Sie benutzerdefinierte Ausnahmen mit lokalisierten Ausnahmemeldungen mithilfe von Satellitenassemblys erstellen, die von der Basisklasse Exception geerbt werden.
Erstellen benutzerdefinierter Ausnahmen
.NET enthält viele verschiedene Ausnahmen, die Sie verwenden können. In den Fällen, in denen keine von ihnen Ihre Anforderungen erfüllt, können Sie jedoch auch eigene benutzerdefinierte Ausnahmen erstellen.
Angenommen, Sie möchten eine StudentNotFoundException
erstellen, die eine StudentName
-Eigenschaft enthält.
Führen Sie die folgenden Schritte aus, um eine benutzerdefinierte Ausnahme zu erstellen:
Erstellen Sie eine Klasse, die von Exception erbt. Der Klassenname muss auf „Exception“ enden:
public class StudentNotFoundException : Exception { }
Public Class StudentNotFoundException Inherits Exception End Class
Fügen Sie die Standardkonstruktoren hinzu:
public class StudentNotFoundException : Exception { public StudentNotFoundException() { } public StudentNotFoundException(string message) : base(message) { } public StudentNotFoundException(string message, Exception inner) : base(message, inner) { } }
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
Definieren Sie alle zusätzlichen Eigenschaften und Konstruktoren:
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; } }
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 Ausnahmemeldungen
Sie haben eine benutzerdefinierte Ausnahme erstellt, und Sie können sie an beliebiger Stelle mit Code wie dem folgenden auslösen:
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. In einer lokalisierten Anwendung möchten Sie abhängig von der Benutzerkultur verschiedene Meldungen verwenden.
Satellitenassemblys bieten eine gute Möglichkeit dazu. Eine Satellitenassembly ist eine DLL-Datei, die Ressourcen für eine bestimmte Sprache enthält. Wenn Sie zur Laufzeit eine bestimmte Ressource anfordern, ermittelt die CLR diese Ressource abhängig von der Benutzerkultur. Wenn keine Satellitenassembly für diese Kultur gefunden wird, werden die Ressourcen der Standardkultur verwendet.
So erstellen Sie lokalisierte Ausnahmemeldungen:
Erstellen Sie einen neuen Ordner mit dem Namen Resources, um darin Ressourcendateien zu speichern.
Fügen Sie diesem Ordner eine neue Ressourcendatei hinzu. 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. Nennen Sie die Datei ExceptionMessages.resx. Dies ist die Standardressourcendatei.
Fügen Sie ein Name-Wert-Paar für die Ausnahmemeldung hinzu, wie in der folgenden Abbildung gezeigt:
Fügen Sie eine neue Ressourcendatei für Französisch hinzu. Nennen Sie sie ExceptionMessages.fr-FR.resx.
Fügen Sie erneut ein Name-Wert-Paar für die Ausnahmemeldung hinzu, aber mit einem französischen Wert:
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.
Sie lösen die Ausnahme mit Code wie dem folgenden aus:
var resourceManager = new ResourceManager("FULLY_QUALIFIED_NAME_OF_RESOURCE_FILE", Assembly.GetExecutingAssembly()); throw new StudentNotFoundException(resourceManager.GetString("StudentNotFound"), "John");
Dim resourceManager As New ResourceManager("FULLY_QUALIFIED_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 RessourcendateiTestProject.Resources.ExceptionMessages
.