【问题标题】:Best syntax to create multi-line string创建多行字符串的最佳语法
【发布时间】:2009-10-02 07:43:52
【问题描述】:

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

我知道以下方法:

使用 StringBuilder

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

看起来太冗长了。

使用@

      var result = @"one
two"

看起来丑陋且格式错误。

你知道更好的方法吗?

【问题讨论】:

  • 如果您真的想要“仅使用文字”,或者只是要进行一些基本的替换,并且有很多文本(例如,想到控制台应用程序的使用消息),您也可以使用“模板”纯文本嵌入资源。

标签: c# .net string syntax multiline


【解决方案1】:

这个呢:

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", “两个”)
  • 我曾想过扩展方法,但最终我认为我更喜欢“普通”的旧式实用程序......
【解决方案2】:

这个呢?

var result = "one\ntwo";

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

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

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

【讨论】:

  • 很好,但我更喜欢用 而不是 来分隔行。多了一个字符,但{0}让我有点生气。
【解决方案3】:

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

你在追求吗:

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

所有这些都会对做某事的“最佳”方式产生重大影响。

【讨论】:

    【解决方案4】:

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

    但为了简化,我会选择:

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

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

    【讨论】:

    • 我以前就是这样做的。 StringBuilder 支持流畅的界面 - 请参阅我的问题,为什么我不喜欢这个解决方案。
    【解决方案5】:

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

    string s = File.OpenText("myfile.txt").ReadToEnd();
    

    【讨论】:

      【解决方案6】:

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

      【讨论】:

      • +1 - 我总是对比较大的文件这样做,但是当你需要编写许多小测试时它不是很方便。它还减少了代码的局部性。
      【解决方案7】:

      有时您需要不止一行。 我使用 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();
          }
      

      【讨论】:

      • 那么如何创建字符串“onetwo”?
      • 如果您只需要一行,我会使用 Konrad 的解决方案,因为在我看来这是最简单的一个。但是,如果您需要不止一行,我会使用 StringBuilder 和 Append("one" + NewLines(3) + "two") 例如。
      【解决方案8】:

      嗯,怎么样:

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

      【讨论】:

      • 您的回答与康拉德鲁道夫的非常相似。我更喜欢使用 Environment.NewLine。
      猜你喜欢
      • 1970-01-01
      • 2011-02-13
      • 2011-04-28
      • 1970-01-01
      • 1970-01-01
      • 2011-06-02
      • 1970-01-01
      • 2012-04-10
      • 1970-01-01
      相关资源
      最近更新 更多