CA1305:指定文化时的详细程度

时间:2012-10-22 11:31:54

标签: c# .net localization code-analysis

当存在需要IFormatProvider的重载但在代码中未使用此重载时,会引发

CA1305

例如,以下代码引发了此警告:

string.Format("{0} - {1}", id, name);

摆脱此警告的显而易见的方法是指定要使用的文化:

string.Format(CultureInfo.InvariantCulture, "{0} - {1}", id, name);

但是,我觉得这太冗长了。

有哪些替代方案?

1 个答案:

答案 0 :(得分:2)

在保留显式格式提供程序传递的同时,导致减少详细程度的唯一替代方法是使用特定于文化的外观方法。幸运的是,通常只有InvariantCulture和CurrentCulture的格式,因此每种底层格式化方法只需要两种外观方法。

示例代码的典型façade方法可能具有以下签名:

public static string FormatForInvariantCulture(this string template, params object[] substitutions)

并按以下方式调用:

"{0} - {1}".FormatForInvariantCulture(id, name);

组织façade方法的另一种方法是使用可以使用IoC技术注入的特定于文化的格式化程序类型。例如,可以为格式化定义如下界面:

public interface IFormatter
{
    string Format(string template, params object[] substitutions);
}

然后可以将特定于文化的实例注入需要使用以下构造函数执行格式化的类型:

public SomeClass(IFormatter systemFormatter, IFormatter uiFormatter)
{
    // ...
}

无论封装façade方法的方式如何,重要的是要考虑CA2241(ProvideCorrectArgumentsToFormattingMethods)不会检查方法的使用情况,因此考虑添加自定义规则可能是值得的。< / p>