在类文件中本地化异常消息?

时间:2013-06-06 07:36:35

标签: c# exception-handling localization

如果类文件包含一些初始验证,并且在验证失败的情况下抛出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;
    }
}

Microsoft的Best Practices for Handling Exceptions声明:“在每个例外中都包含一个本地化的描述字符串。”

我已经标记了这个C#,但最后这更多是关于一般做法,我想。我当时认为这可能更像是一个 programmers.stackexchange 问题,但我决定在这里发布。不确定。

1 个答案:

答案 0 :(得分:1)

您可以遵循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")); 
    }

希望这有帮助。