如果类文件包含一些初始验证,并且在验证失败的情况下抛出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 问题,但我决定在这里发布。不确定。
答案 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"));
}
希望这有帮助。