批量转换C#代码以使用String.Format

时间:2012-10-08 14:14:39

标签: c#

  

可能重复:
  Resharper string.format shortcut

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

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

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

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

是否有任何工具可以自动执行此作业(将字符串连接转换为String.Format)?

如果没有,我认为有必要找到一个解析器,为给定的C#源文件构造一个语法树,找到在这个树中进行字符串连接的表达式(看起来不容易)并转换找到的发生的事件? / p>

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

3 个答案:

答案 0 :(得分:1)

看看DevExpress CodeRush。它允许轻松查找和重构这些问题。虽然我不知道你是否可以自动化重构。 ReSharper也有类似的功能。

答案 1 :(得分:1)

ReSharper支持这种操作,按 Alt + Enter Enter

在这里阅读更多相关信息: Resharper string.format shortcut

答案 2 :(得分:1)

如果您没有工具,Visual Studio中的一个简单的全部替换应该这样做。

查找

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

替换为:

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

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