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

批量转换C#代码以使用String.Format,c#,C#,可能重复: 不幸的是,在我们庞大的代码库中,有很多这样的语句: MessageBox.Show("Hello, " + userName + "!"); 显然,这将更好地促进字符串外部化: MessageBox.Show(String.Format("Hello, {0}!", userName)); 是否有任何工具可以自动执行此作业(将字符串连接转换为string.Format) 如果不是,我想有必要找到一个为给定的C#源文件构造语法树的解析器,找到在这个树中进行字符串连接的表达式(似乎

可能重复:

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

MessageBox.Show("Hello, " + userName + "!");
显然,这将更好地促进字符串外部化:

MessageBox.Show(String.Format("Hello, {0}!", userName));
是否有任何工具可以自动执行此作业(将字符串连接转换为string.Format)

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


编辑:DevExpress CodeRush完全符合我的要求-非常酷。但不幸的是,它只对当前的源文件有效,我必须单击每一个事件(或者看起来是这样)。我想对所有源文件(如“全部替换”)执行此操作。

请查看。它允许轻松发现和重构这些问题。虽然我不知道你是否能自动进行重构。具有类似的功能。

通过按Alt+Enter键,ReSharper确实支持此类操作

请在此处阅读更多信息:

如果您没有工具,在VisualStudio中用一个简单的“全部替换”就可以了

查找:

替换为:

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

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

ReSharper可以这样做吗?我看不出这将如何帮助您实现国际化。只有从资源文件中提取字符串才能做到这一点。詹姆斯,你说得对-但是在移动(现有)资源文件中的字符串之前,我需要转换我的“+”字符串连接(包含多个字符串)我不认为这是重复的,因为我要求一个可用于批处理的解决方案。我投票赞成重新打开这个问题。这绝对不是复制品。如果这样做的话,我想我会做一个查找下一个/替换。信任,但要验证。谢谢你的回答。这确实是一个好主意,但如果同一行上有多个连接(我必须承认我们已经有了连接),它将不起作用。@WonkotheSane我通常使用“保持更改的文件打开”选项来验证结果。查找下一个/替换对于数千个替换是不可行的,但是在以后检查一些随机文件会很容易。谢谢你的指针。我现在正在下载CodeRush来尝试一下。如果它有一个“半自动”模式就太好了。这正是我想要的;但不幸的是,我没有找到一种方法来为我的所有源文件自动执行此操作。将就此问题联系DevExpress支持部门。DevExpress的人员将在未来版本中实施此功能@MatthiasWuttke哇,谢谢你的更新!
String.Format("\1#{0}", \2)