自动重构为string.Format

时间:2011-04-07 17:31:40

标签: c# visual-studio string automated-refactoring

我在VS2008中有一个c#项目,它有很多行代码如下:

string s = "bla blab" + x + "bla bla bla" + y + .... ;

我希望使用string.Format(...)将这些字符串转换为单个字符串。

我目前正在使用Resharper 5.0,我只需点击一下即可重构一行代码。 问题是我有更多这样的1000行,我不想手动遍历每一行。

有没有办法自动执行此操作?

编辑: 正如马克纠正我,我真的不需要这样做, 但我有另一个非常类似的问题: 我有这个代码

 string s = "aaaaaaaaaaaaaaaaaaaaaaaa" +
                   "aaaaaaaaaaaaaaaaaaaaaaaa" +
                   "aaaaaaaaaaaaaaaaaaaaaaaa" +
                   "aaaaaaaaaaaaaaaaaaaaaaaa" +
                   "aaaaaaaaaaaaaaaaaaaaaaaa" +
                   "aaaaaaaaaaaaaaaaaaaaaaaa" +
                   "aaaaaaaaaaaaaaaaaaaaaaaa";

(字符串是一些sql查询)

我想将它重构为一个const字符串:

string s = "aaaaaaaaaaaaaaaaaa....aaaaa";

(这次,效率更高吧?)

resharper可以每个字符串自动执行此操作, 但同样,我想做很多次。

保持线条缩进会很棒:

string s = @"aaaaaaaaaaaaaaaaaaaaaaaa
                    aaaaaaaaaaaaaaaaaaaaaaaa
                    aaaaaaaaaaaaaaaaaaaaaaaa
                    aaaaaaaaaaaaaaaaaaaaaaaa
                    aaaaaaaaaaaaaaaaaaaaaaaa
                    aaaaaaaaaaaaaaaaaaaaaaaa
                    aaaaaaaaaaaaaaaaaaaaaaaa";

但只有一条长线也可以。

感谢, 利。

2 个答案:

答案 0 :(得分:5)

来自评论:

  

它更有效的记忆

不,不是。它是大约相同,因为数据传入时string.Format 略微 有效一个数组(通常是GEN0),有必要解析格式字符串(实际上非​​常快,公平)。

在规范中定义了复合字符串+序列,即

string s = "abc" + x + "def" + y;

编译为:

string s = string.Concat("abc", x, "def", y);

在内部,这是非常有效的,并没有做经典的“伸缩弦”问题。另外,有string.Format的重载占用了不同数量的操作数,以避免甚至是params-array开销。当所有操作数都是字符串时,还有额外的重载(它可以更容易)。

简而言之,这不会让你失望。除非你这样做,所以你可以提供外部格式(在i18n场景中很常见),我会不管它。你所做的只是冒着虫子的风险;你没有提高效率。

答案 1 :(得分:0)

您是否尝试过运行Resharper代码清理?您可以创建一个单独的配置文件,只进行所需的更改。