4

可能重复:
Resharper string.format 快捷方式

在我们庞大的代码库中,不幸的是有很多这样的语句:

MessageBox.Show("Hello, " + userName + "!");

显然,这会更好地促进字符串外部化:

MessageBox.Show(String.Format("Hello, {0}!", userName));

是否有任何工具可以自动化这项工作(将字符串连接转换为 String.Format)?

如果没有,我认为有必要找到一个为给定的 C# 源文件构造语法树的解析器,在该树中找到执行字符串连接的表达式(似乎并不容易)并转换找到的出现?

编辑:DevExpress CodeRush 完全符合我的要求 - 非常酷。但不幸的是,它只适用于当前的源文件,我必须点击每一次出现(或者看起来如此)。我想对我所有的源文件进行操作(比如“全部替换”)。

4

3 回答 3

1

Have a look at DevExpress CodeRush. It allows to easily find and refactor these issues. Though I don't know if you can automate the refactoring. ReSharper has a similar feature.

于 2012-10-08T14:20:03.250 回答
1

ReSharper does support this kind of action, by pressing Alt+EnterEnter.

Read more about this here: Resharper string.format shortcut

于 2012-10-08T14:20:54.500 回答
1

如果你没有工具,Visual Studio 中的一个简单的 Replace All 就可以了。

寻找:

"([^"]*)"\s*\+\s*(:i)

替换为:

String.Format("\1#{0}", \2)

不幸的是,我现在无法访问 Visual Studio 来测试这些表达式。您可能必须在“查找”表达式中使用:b而不是。\s

于 2012-10-08T14:26:40.730 回答