CA1305当存在需要 IFormatProvider
的重载但代码中未使用此重载时引发。
例如,以下代码会引发此警告:
string.Format("{0} - {1}", id, name);
消除此警告的明显方法是指定要使用的区域性:
string.Format(CultureInfo.InvariantCulture, "{0} - {1}", id, name);
但是,我认为这太冗长了。
有哪些替代方案?
最佳答案
几乎唯一可以减少冗长程度同时仍保留显式格式提供程序传递的替代方法是使用特定于文化的外观方法。幸运的是,一个通常只用于 InvariantCulture 和 CurrentCulture 的格式,因此每个底层格式化方法只需要两个外观方法。
示例代码的典型外观方法可能具有如下签名:
public static string FormatForInvariantCulture(this string template, params object[] substitutions)
并被调用如下:
"{0} - {1}".FormatForInvariantCulture(id, name);
组织 façade 方法的另一种方法是进入特定于文化的格式化程序类型,这些格式化程序类型可以使用 IoC 技术注入(inject)。例如,可以为格式化定义如下接口(interface):
public interface IFormatter
{
string Format(string template, params object[] substitutions);
}
然后可以将特定于文化的实例注入(inject)到需要使用如下构造函数执行格式化的类型中:
public SomeClass(IFormatter systemFormatter, IFormatter uiFormatter)
{
// ...
}
无论 façade 方法的打包方式如何,重要的是要考虑 CA2241 ( ProvideCorrectArgumentsToFormattingMethods ) 不会检查方法的使用情况,因此可能值得考虑添加自定义规则来执行此操作。
关于c# - CA1305 : Verbosity when specifying culture,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13010555/