创建多行字符串的最佳语法

8

如何在C#中创建多行字符串?

我知道以下几种方法:

使用StringBuilder

var result = new StringBuilder().AppendLine("one").AppenLine("two").ToString()

看起来太啰嗦了。

使用 @ 符号

      var result = @"one
two"

看起来很丑并且格式混乱。

你知道更好的方法吗?


如果你真的只需要“字面量”,或者只是要进行一些基本的替换,并且有大量文本(例如,控制台应用程序的使用消息),那么你还可以使用“模板”纯文本嵌入资源。 - Christian.K
8个回答

23
这个怎么样?
var result = string.Join(Environment.NewLine, new string[]{ 
    "one",
    "two" 
});

这可能有点麻烦,也可能是过度设计了,但它可以保留您代码中的行间距。
为了稍微改进一下,你可以使用一个辅助方法:

static string MultiLine(params string[] args) {
    return string.Join(Environment.NewLine, args);
}

static void Main(string[] args) {
    var result = MultiLine( 
        "one",
        "two" 
    );
}

还不错。我想我会创建扩展方法并像这样使用: new[] { "One", "Two" }.Join(Environment.NewLine) 或者甚至创建一个类并像这样使用:StringHelper.JoinLines("one", "two") - Konstantin Spirin
我曾经考虑过扩展方法,但最终我认为我更喜欢“普通”的老式实用程序... - Paolo Tedesco

12

这个怎么样?

var result = "one\ntwo";

如果你对特定操作系统的换行符很挑剔,可以使用 Format

var result = String.Format("one{0}two", Environment.NewLine);

(嗯,“挑剔”并不是正确的词:在处理文本文件时,特定于操作系统的行尾往往是需要甚至必要的,例如在处理旧版软件时。)


不错,但我更喜欢使用“<”,“>”来分隔行,而不是使用“{0}”。多一个字符,但{0}有点烦人。 - Konstantin Spirin

2

“最好”的定义是非常开放的。

您是否想要:

  • 代码的性能
  • 编写代码的速度
  • 其他程序员易于理解
  • 其他程序员易于修改

所有这些因素都会对“最佳”做法产生重大影响。


2
我会说这取决于您的需求...
但是为了简化,我建议选择以下内容:
var s = new StringBuilder();
s.Append("one");
s.Append("two");
s.ToString();

但是,由于我们不知道您需要它做什么。因此,很难给出更好的提示。


我之前确实做过这件事。StringBuilder支持流畅接口——请参见我的问题,了解为什么我不喜欢这个解决方案。 - Konstantin Spirin

1

嗯,这样怎么样:

string s = 
  "abc\n" + 
  "def\n" ;

1
你的回答与Konrad Rudolph非常相似。我更喜欢使用Environment.NewLine。 - Konstantin Spirin

1
你不应该在源代码中定义大字符串。 你应该将它定义在一个外部文本文件中:
string s = File.OpenText("myfile.txt").ReadToEnd();

1

延续codymanix所说的话,你可以将长的多行字符串放在资源文件中。对于某些部署方案来说,这可能更容易,因为文本“文件”将包含在您的DLL / EXE中。


+1 - 我总是对相对较大的文件这样做,但当你需要编写许多小测试时,这并不是非常方便。它还会降低代码的局部性。 - Konstantin Spirin

0
有时候你需要不止一行。 我使用 Environment.NewLine 但是我把它放在一个方法中来进行乘法操作。 :)
    private string newLines(int multiplier)
    {
        StringBuilder newlines = new StringBuilder();
        for (int i = 0; i < multiplier; i++)
            newlines.Append(Environment.NewLine);
        return newlines.ToString();
    }

那么,你如何创建字符串“one<newline>two”? - Konstantin Spirin
如果你只需要一行,我会使用Konrad的解决方案,因为它对我来说似乎是最简单的。然而,如果你需要多行,例如"one" + NewLines(3) + "two",我会使用StringBuilder和Append。 - G Berdal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接