抛出异常时,我经常传入一个格式化的字符串,该字符串公开有关已发生问题的详细信息。如果可能,我总是指定格式提供程序(这是一种很好的做法,因为否则您可能会忘记决定哪种文化是合适的,并且默认是当前文化,这可能会导致许多错误)。
这是一个例子:
throw new InvalidOperationException(
string.Format(
CultureInfo.CurrentCulture,
"{0} is a bad number.",
number));
如上所示,我很想使用CurrentCulture
,因为异常消息是针对人类的(当然,代码不应该对异常消息本身起作用)。该消息将使用客户的文化进行格式化,因此每当我需要将其显示给我的客户时,它看起来都不错。
但是,除了向用户显示消息外,异常情况也可能会记录到日志文件中。我已经看到我的日志文件中有许多消息,其中包含用于格式化它们的各种文化。真是丑!在这种情况下,InvariantCulture
可能更合适,或者可能是托管日志文件的服务器的文化。
这里的重点是,在格式化异常时,您永远不了解您的受众,因此似乎无法决定在格式化时使用哪种文化。能够将格式化推迟到捕获异常的时间点会很棒,但这将超出在 .NET 中实现异常的方式。
那么您对此有何看法?