7

在 C# 中创建多行字符串的最佳方法是什么?

我知道以下方法:

使用 StringBuilder

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

看起来太冗长了。

使用 @

      var result = @"one
two"

看起来丑陋且格式错误。

你知道更好的方法吗?

4

8 回答 8

21

那这个呢:

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" 
    );
}
于 2009-10-02T07:51:48.747 回答
11

那这个呢?

var result = "one\ntwo";

如果您对特定于操作系统的行尾很挑剔,请使用Format

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

(好吧,“挑剔”不是正确的词:在处理文本文件时,在处理遗留软件时,通常需要甚至需要特定于操作系统的行结尾。)

于 2009-10-02T07:46:00.727 回答
2

“最佳”是一个非常开放的观点。

你在追求:

  • 代码的性能
  • 速度编码器可以写它
  • 其他编码人员能够轻松理解它
  • 其他编码人员能够轻松修改它

所有这些对于做某事的“最佳”方式都有很大的不同。

于 2009-10-02T07:50:46.003 回答
2

我会说这取决于你需要什么......

但为了简化它,我会选择:

var s = new StringBuilder();
s.Append("one");
s.Append("two");
s.ToString();

但是因为我们不知道你需要它做什么。很难给出更好的提示

于 2009-10-02T08:02:34.687 回答
1

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

于 2009-10-02T23:24:42.550 回答
1

您不应在源代码中定义大字符串。您应该在外部文本文件中定义它:

string s = File.OpenText("myfile.txt").ReadToEnd();
于 2009-10-02T23:06:13.240 回答
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();
    }
于 2009-10-02T07:48:59.470 回答
0

嗯,怎么样:

string s = 
  "abc\n" + 
  "def\n" ;
于 2009-11-19T04:19:23.380 回答