自动重构为string.Format

本文关键字:string Format 重构 | 更新日期: 2023-09-27 17:49:01

我在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:

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

(这一次效率更高,对吧?)

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

保持行缩进会很好:

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

但是只有一行也可以。

谢谢,列弗。

自动重构为string.Format

From comments:

它在内存方面更有效

不,不是。大致相同,string.Format 的效率略低于,因为数据是在数组中传递的(通常是GEN0),并且有必要解析格式字符串(这实际上非常快,公平地说)。

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

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

编译为:

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

在内部,这是非常有效的,并且不会解决经典的"伸缩字符串"问题。此外,string.Format的过载采用不同数量的操作数,以避免甚至params-array开销。当所有的操作数都是字符串时,会有额外的重载(这样更容易)。

简而言之,这不会花费你什么。除非您这样做是为了可以从外部提供格式(在i18n场景中很常见),否则我不会这么做。你所做的只是冒着bug的风险;

你试过运行Resharper代码清理吗?您可以创建一个单独的配置文件,它只做您想要的更改。