c# - CA1305 : Verbosity when specifying culture

标签 c# .net localization code-analysis

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/

相关文章:

c# - 哪些策略和工具可用于查找 .NET 中的内存泄漏?

c# - ASP.NET MVC 模型类更新功能

c# - C# .NET 中的通用类型参数约束

android - 将默认 Locale 设置为 DatePicker 和 TimePicker

iphone - Xcode 本地化让我抓狂!不加载 Storyboard

c# - MSTest:如果 3 个断言之一有效,如何断言肯定?

c# - 为什么 IEnumerable<T> 继承自 IEnumerable?

.net - 新的 Windows 应用程序 - 什么语言?

c# - WPF 多重绑定(bind)失败。为什么?

c# - WPF 应用程序的本地化