Share via


Skapa användardefinierade undantag med lokaliserade undantagsmeddelanden

I den här artikeln får du lära dig hur du skapar användardefinierade undantag som ärvs från basklassen Exception med lokaliserade undantagsmeddelanden med hjälp av satellitsammansättningar.

Skapa anpassade undantag

.NET innehåller många olika undantag som du kan använda. Men i vissa fall när ingen av dem uppfyller dina behov kan du skapa egna anpassade undantag.

Anta att du vill skapa en StudentNotFoundException som innehåller en StudentName egenskap. Följ dessa steg för att skapa ett anpassat undantag:

  1. Skapa en serialiserbar klass som ärver från Exception. Klassnamnet ska sluta med "Undantag":

    [Serializable]
    public class StudentNotFoundException : Exception { }
    
    <Serializable>
    Public Class StudentNotFoundException
        Inherits Exception
    End Class
    
  2. Lägg till standardkonstruktorerna:

    [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. Definiera eventuella ytterligare egenskaper och konstruktorer:

    [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
    

Skapa lokaliserade undantagsmeddelanden

Du har skapat ett anpassat undantag och du kan kasta det var som helst med kod som följande:

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

Problemet med föregående rad är att det "The student cannot be found." bara är en konstant sträng. I ett lokaliserat program vill du ha olika meddelanden beroende på användarkulturen. Satellitsammansättningar är ett bra sätt att göra det på. En satellitsammansättning är en .dll som innehåller resurser för ett visst språk. När du ber om en specifik resurs vid körning hittar CLR den resursen beroende på användarkulturen. Om ingen satellitsammansättning hittas för den kulturen används resurserna i standardkulturen.

Så här skapar du lokaliserade undantagsmeddelanden:

  1. Skapa en ny mapp med namnet Resurser för att lagra resursfilerna.

  2. Lägg till en ny resursfil i den. Om du vill göra det i Visual Studio högerklickar du på mappen i Solution Explorer och väljer Lägg till>ny objektresursfil.> Ge filen namnet ExceptionMessages.resx. Det här är standardresursfilen.

  3. Lägg till ett namn/värde-par för ditt undantagsmeddelande, som följande bild visar:

    Add resources to the default culture

  4. Lägg till en ny resursfil för franska. Ge den namnet ExceptionMessages.fr-FR.resx.

  5. Lägg till ett namn/värde-par för undantagsmeddelandet igen, men med ett franskt värde:

    Add resources to the fr-FR culture

  6. När du har skapat projektet ska utdatamappen för bygget innehålla mappen fr-FR med en .dll fil, som är satellitsammansättningen.

  7. Du utlöser undantaget med kod som följande:

    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")
    

    Kommentar

    Om projektnamnet är TestProject och resursfilen ExceptionMessages.resx finns i resursmappenför projektet är TestProject.Resources.ExceptionMessagesresursfilens fullständigt kvalificerade namn .

Se även