【问题标题】:How to change the C# StringBuilder.AppendLine line ending?如何更改 C# StringBuilder.AppendLine 行尾?
【发布时间】:2019-04-17 14:12:47
【问题描述】:

我有一个 C# 中的旧应用程序,并使用 StringBuilder.AppendLine 添加带有字符串的行,然后计算字符串的校验和。 到目前为止,它始终在 Windows Desktop/Windows CE 上运行,因此行尾始终为 \r\n

现在我需要让它在 linux/mono 上同样工作。但随后AppendLine 只添加了\n 而不是\r\n

所以我必须在 stringbuilder 中添加与 windows 相同的行尾。但是怎么做呢?

s.Append("\r\n");

好像没用。

s.Append(13);
s.Append(10);

也不行。

【问题讨论】:

  • 为什么不添加自己的扩展方法?
  • “似乎不起作用” - 为什么不呢? “工作也不行” - 为什么不呢?如果你这样做,是什么结果?

标签: c# stringbuilder line-endings


【解决方案1】:

您无法更改StringBuilder 使用的值。 source 使用 Environment.NewLine,在 Linux 系统上将是 \n。没有过载。你必须实现你自己的方法,或者像s.Append("13\r\n");这样追加

[System.Runtime.InteropServices.ComVisible(false)]
        public StringBuilder AppendLine(string value) {
            Contract.Ensures(Contract.Result<StringBuilder>() != null);
            Append(value);
            return Append(Environment.NewLine);
}

【讨论】:

    【解决方案2】:

    StringWriter 可用于写入StringBuilder

    var builder = new StringBuilder();
    using var stringWriter = new StringWriter(builder)
    {
        NewLine = "\r\n"
    };
    
    stringWriter.WriteLine("line1");
    stringWriter.WriteLine("line2");
    
    var output = builder.ToString();
    

    【讨论】:

      【解决方案3】:
      const string LineEnd = "\r\n";
      s.Append(LineEnd);
      

      在 unix/linux 上也以 windows 样式添加行尾。

      【讨论】:

      • 根据您的问题:s.Append("\r\n") 似乎不起作用。”。那为什么会这样呢?
      猜你喜欢
      • 1970-01-01
      • 2017-05-13
      • 2012-05-12
      • 2011-09-12
      • 1970-01-01
      • 1970-01-01
      • 2014-07-27
      • 1970-01-01
      相关资源
      最近更新 更多