2

我正在尝试满足新库中的所有 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);
}

这行得通,但如果我的部件格式错误,我会丢失所有的 Resharper 警告"You entered: {0}", { value }

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

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

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

还有其他想法吗?

4

1 回答 1

1

我实际上会使用包装方法。当您将您的方法与 ReSharper 关联时,您可以保留您的 ReSharper 警告JetBrains.Annotations.StringFormatMethodAttribute

更新我错过了params签名中的关键字。感谢@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"在您的项目中引用。

更多细节在这里

于 2012-10-01T12:22:00.803 回答