我在 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查询)
我想将它重构为一个常量字符串:
string s = "aaaaaaaaaaaaaaaaaa....aaaaa";
(这次效率更高了吧?)
resharper 可以针对每个字符串自动执行此操作, 但同样,我想做很多次。
保留行缩进会很棒:
string s = @"aaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaa";
但只要一长行也可以。
谢谢, 水平
最佳答案
来自评论:
it's much more efficient memory wise
不,不是。它大约相同,string.Format
marginally less 高效,因为数据以数组(通常是 GEN0)的形式传递,需要解析格式字符串(公平地说,这实际上非常快)。
规范中定义复合字符串+
序列,即
string s = "abc" + x + "def" + y;
编译为:
string s = string.Concat("abc", x, "def", y);
在内部,这是非常有效的,并且不会出现经典的“伸缩字符串”问题。此外,string.Format
的重载采用不同数量的操作数,甚至可以避免参数数组开销。当所有操作数都是字符串时的额外重载(它可以更容易)。
简而言之,这不会让您付出任何代价。除非您这样做以便可以在外部提供格式(在 i18n 场景中很常见),否则我不会管它。您所做的就是冒错误的风险;你并没有让它更有效率。
关于c# - 自动重构为 string.Format,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5585146/