【微软技术栈】C#.NET 如何使用本地化的异常消息创建用户定义的异常

本文内容

  1. 创建自定义异常
  2. 创建本地化异常消息

在本文中,你将了解如何通过使用附属程序集的本地化异常消息创建从 Exception 基类继承的用户定义异常。

一、创建自定义异常

.NET 包含许多你可以使用的不同异常。 但是,在某些情况下,如果它们都无法满足你的需要,则可以创建自己的自定义异常。

假设要创建一个 StudentNotFoundException,其中包含 StudentName 属性。 若要创建自定义异常,请执行以下步骤:

  1. 创建一个从 Exception 继承的可序列化类。 类名称应以“Exception”结尾:

    [Serializable]
    public class StudentNotFoundException : Exception { }
    
  2. 添加默认构造函数:

    [Serializable]
    public class StudentNotFoundException : Exception
    {
        public StudentNotFoundException() { }
    
        public StudentNotFoundException(string message)
            : base(message) { }
    
        public StudentNotFoundException(string message, Exception inner)
            : base(message, inner) { }
    }
    
  3. 定义任何其他属性和构造函数:

    [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;
        }
    }
    

二、创建本地化异常消息

你已创建一个自定义异常,可以使用如下所示的代码在任何位置将其抛出:

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

上一行的问题是,"The student cannot be found." 只是一个常量字符串。 在本地化应用程序中,你需要根据用户区域性使用不同的消息。 附属程序集是执行此操作的好方法。 附属程序集是一个 .dll,其中包含特定语言的资源。 当你在运行时请求特定资源时,CLR 将根据用户区域性查找该资源。 如果找不到该区域性对应的附属程序集,则使用默认区域性的资源。

创建本地化异常消息:

  1. 创建一个名为“Resources”的新文件夹来保存资源文件。

  2. 向其中添加新的资源文件。 若要在 Visual Studio 中执行此操作,请在“解决方案资源管理器”中右键单击该文件夹,然后选择“添加”>“新项”>“资源文件”。 将该文件命名为“ExceptionMessages.resx”。 这是默认的资源文件。

  3. 为异常消息添加名称/值对,如下图所示:

     

    80f5eb3f84a107c43580385337b3bb3e.jpeg

  4. 为法语添加新的资源文件。 将其命名为“ExceptionMessages.fr-FR.resx”。

  5. 再次为异常消息添加名称/值对,但使用法语值:

     

    d5070f6013b42391cc5f41e25b0a2209.jpeg

  6. 生成项目后,生成的输出文件夹应包含 fr-FR 文件夹,其中具有 .dll 文件,它是附属程序集。

  7. 使用如下所示代码抛出异常:

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

     备注

    如果项目名称为 TestProject,并且资源文件 ExceptionMessages.resx 位于项目的 Resources 文件夹中,则资源文件的完全限定名称为 TestProject.Resources.ExceptionMessages

 

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吉特思米(gitusme)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值