4

我在 VS2008 中有 ac# 项目,其中有很多代码行,如下所示:

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";

但只要一条长线也可以。

谢谢,列夫。

4

2 回答 2

5

来自评论:

它的内存效率要高得多

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

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

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

编译为:

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

在内部,这是非常有效的,并且不会解决经典的“伸缩字符串”问题。此外,string.Format为了避免参数数组开销,采用不同数量的操作数会导致重载。以及所有操作数都是字符串时的额外重载(它可以更容易)。

简而言之,这不会让您付出任何代价。除非您这样做是为了可以在外部提供格式(在 i18n 场景中很常见),否则我将不理会它。你所做的只是冒着错误的风险;你没有让它更有效率。

于 2011-04-07T18:18:45.953 回答
0

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

于 2011-04-07T17:35:07.850 回答