类文件内异常消息的本地化

本文关键字:本地化 消息 异常 文件 | 更新日期: 2023-09-27 18:17:21

如果一个类文件包含一些初始验证,并且在验证失败的情况下抛出一个Exception

  • Exception Message的类文件中启用本地化是否被认为是好的做法?

  • 如何捕获这些局部异常?简单的字符串比较Exception Message似乎…至少可以说不优雅。是否有更好的方法来解决这个问题?

我是如何计划的一个例子:

private ResourceManager localization;
private string email;
public string Email
{
    get { return email; }
    set
    {
        if (value.Length > 50)
            throw new ArgumentException(localization.GetString("toolong_email"));
        else if (!IsValidEmail(value))
            throw new ArgumentException(localization.GetString("invalid_email"));
        else
            email = value;
    }
}

微软处理异常的最佳实践声明:"在每个异常中包含本地化的描述字符串。"

我把它标记为c#,但我想最后这更多的是关于一般实践的。我在想,这可能更像是一个程序员。Stackexchange 问题,但决定在这里发布。不确定。

类文件内异常消息的本地化

您可以遵循System.Net.WebException设计并传递一个易于从代码中处理的错误类型(就像使用上述异常类的Status属性一样)。异常消息本身可以被本地化(就像任何其他使用资源而不是硬编码字符串的CLR异常一样,据我所知)。

另一个解决方案是针对不同类型的错误抛出不同的异常:
 if (value.Length > 50)
    {
      throw new ValueLengthExceededException("Email", 
        localization.GetString("toolong_email"));
    }
    else if (!IsValidEmail(value))
    {
      /* 
        Or a generic "InvalidFormatException/FormatException" with 
        member name like a previous example. 
      */
      throw new InvalidEmailException(localization.GetString("invalid_email")); 
    }