在我们庞大的代码库中,不幸的是有很多这样的陈述:
MessageBox.Show("Hello, " + userName + "!");
显然,这样可以更好地促进字符串外部化:
MessageBox.Show(String.Format("Hello, {0}!", userName));
是否有任何工具可以自动执行此作业(将字符串连接转换为String.Format)?
如果没有,我认为有必要找到一个解析器,为给定的C#源文件构造一个语法树,找到在这个树中进行字符串连接的表达式(看起来不容易)并转换找到的发生的事件? / p>
编辑:DevExpress CodeRush完全符合我的要求 - 非常酷。但不幸的是它只适用于当前的源文件,我必须点击每个出现(或者看起来似乎)。我想对我的所有源文件进行操作(比如'全部替换')。
答案 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
。