如何使用當地語系化例外狀況訊息來建立使用者定義的例外狀況
在本文中,您會了解如何透過使用附屬組件的當地語系化例外狀況訊息,建立繼承自基底 Exception 類別的使用者定義例外狀況。
建立自訂例外狀況
.NET 包含許多您可使用的不同例外狀況。 不過,在某些情況下,當這些全都不符合您的需求時,您可建立自己的自訂例外狀況。
假設您要建立包含 StudentName
屬性的 StudentNotFoundException
。
若要建立自訂類別,請依照下列步驟:
建立繼承自 Exception 的類別。 類別名稱的結尾應為 "Exception":
public class StudentNotFoundException : Exception { }
Public Class StudentNotFoundException Inherits Exception End Class
新增預設建構函式:
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
定義任何其他屬性和建構函式:
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
建立當地語系化例外狀況訊息
您已建立自訂例外狀況,並可使用如下列的程式碼以在任何位置中擲回例外狀況:
throw new StudentNotFoundException("The student cannot be found.", "John");
Throw New StudentNotFoundException("The student cannot be found.", "John")
上述行的問題在於 "The student cannot be found."
僅是常數字串。 在當地語系化的應用程式中,您想要根據使用者文化特性而有不同訊息。
附屬組件可讓您執行此動作。 附屬組件是包含特定語言資源的 DLL。 當您在執行階段要求特定資源時,CLR 會根據使用者文化特性尋找該資源。 如果找不到該文化特性的附屬組件,則會使用預設文化特性的資源。
若要建立當地語系化的例外狀況訊息:
建立名為 Resources 的新資料夾以保存資源檔。
將新的資源檔新增至其中。 若要在 Visual Studio 中執行此動作,請以滑鼠右鍵按一下 [方案總管] 中的資料夾,然後選取 [新增]>[新增項目]>[資源檔]。 將檔案命名為 ExceptionMessages.resx。 這是預設資源檔。
新增例外狀況訊息的名稱/值組,如下圖所示:
新增法文的新資源檔。 將資源檔命名為 ExceptionMessages.fr-FR.resx。
再次新增例外狀況訊息的名稱/值組,但以法文值進行:
建立專案之後,組建輸出資料夾應包含 fr-FR 資料夾,其中具有附屬組件 .dll 檔案。
您可使用如下的程式碼以擲回例外狀況:
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")
注意
如果專案名稱為
TestProject
和資源檔案 ExceptionMessages.resx 位於專案的 Resources 資料夾中,則資源檔的完整名稱為TestProject.Resources.ExceptionMessages
。