当抛出异常时,我经常传递一个格式化的字符串,以暴露发生的问题的细节。如果可能的话,我总是指定一个格式提供程序(这是一个好习惯,因为否则你可能会忘记决定哪个文化是合适的,而默认值是当前文化,这可能会导致许多错误)。
以下是一个例子:
throw new InvalidOperationException(
string.Format(
CultureInfo.CurrentCulture,
"{0} is a bad number.",
number));
我倾向于使用
CurrentCulture
,如上所示,因为异常消息是针对人类的(当然,代码不应该直接操作异常消息)。消息将使用客户端的文化进行格式化,因此每当我需要向客户端显示它时,它看起来很好。然而,除了向用户显示消息外,异常可能也会被记录到日志文件中。我看过许多消息坐落在我的日志文件中,并使用各种文化进行格式化。非常丑陋!在这种情况下,
InvariantCulture
可能更合适,或者使用托管日志文件的服务器的文化。关键在于,在格式化异常时,您永远无法确定您的受众,因此似乎不可能决定在格式化时使用哪种文化。能够将格式化推迟到捕获异常的点将是很好的,但那将远远超出.NET中实现异常的方式。
那么你对此有什么想法呢?