.net 处理String.Format()中的CultureInfo

.net 处理String.Format()中的CultureInfo,.net,globalization,.net,Globalization,我试图在一个新的库中满足所有FxCop规则。因此,我需要为所有String.Format()调用指定一个IFormatProvider。例如: public string Example(string value) { return string.Format(CultureInfo.CurrentCulture, "You entered: {0}", value); } 数百次指定CultureInfo会变得非常乏味,因此我制作了

我试图在一个新的库中满足所有FxCop规则。因此,我需要为所有String.Format()调用指定一个IFormatProvider。例如:

public string Example(string value) {
    return string.Format(CultureInfo.CurrentCulture, 
                         "You entered: {0}", value);
}
数百次指定CultureInfo会变得非常乏味,因此我制作了一个助手:

public string Example2(string value) {
    return CurrentCulture("You entered: {0}", { value });
}

private string CurrentCulture(string value, object[] objects) {
    return string.Format(CultureInfo.CurrentCulture, value, objects);
}
这是可行的,但是如果我将
“You entered:{0}”、{value}
部分格式化错误,我将丢失所有的Resharper警告

也许最好只使用一个简短的别名:

public string Example3(string value) {
    return string.Format(Current(), "You entered: {0}", value);
}

private CultureInfo Current() {
    return CultureInfo.CurrentCulture;
}

还有其他想法吗?

我会选择包装器方法。当使用ReSharper的
JetBrains.Annotations.StringFormatMethodAttribute
对方法进行属性化时,可以保留ReSharper警告

更新我错过了签名中的
参数
键盘。感谢@EricMSFT的评论/提示

[StringFormatMethod("value")]
private string CurrentCulture(string value, params object[] objects) {
    return string.Format(CultureInfo.CurrentCulture, value, objects);
}
最简单的方法(还有其他方法,比如在您自己的代码库中定义
StringFormatMethodAttribute
)可能就是在项目中引用
“C:\Program Files(x86)\JetBrains\ReSharper\v6.1\Bin\JetBrains.Annotations.dll”


更多详细信息。

string.Format(string,Object)方法使用CurrentCulture。您要做的是编写另一个函数,它做同样的事情,并调用这个新函数来满足一个规则,这表明您不调用这样的函数。我只想禁用该规则或在任何地方编写CultureInfo.CurrentCulture。我理解你的论点,但我喜欢该规则。有一半的时间我想使用不变量文化。该规则有助于避免将日期以德文格式写入数据存储,并尝试以美国格式读取数据。谢谢,这是我不知道的Resharper的一个很棒的功能。但是,对于包含可变参数计数的单个object[]参数,它似乎不起作用。它假定格式字符串的每个段都有一个格式参数,后跟一个对象。try(字符串值,params object[]objects)