自动重构为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";
但是只有一行也可以。
谢谢,列弗。
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代码清理吗?您可以创建一个单独的配置文件,它只做您想要的更改。