c# - 自动重构为 string.Format

标签 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查询)

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

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/

相关文章:

visual-studio - 创建包含共享项目属性的 nuget - 自动引用

asp.net-mvc - 无法将项目发布到文件系统中

PHP - 检查一个字符串是否包含另一个字符串中的任何字符

java - 如果第一个索引与字符串匹配,如何读取并返回数组的第二个索引?

string - 从值字符串中获取值

c# - SQLite 引用警告处理器不匹配

c# - 没有注册类型 'Microsoft.AspNetCore.Mvc..."的服务

c# - 反序列化使用属性名称/值对的 xml

c# - ObservableCollection<T>.Add 是如何工作的?

c++ - 每次更改代码后都无法解析外部符号