当我使用StringBuilder.Append而不是.AppendLine时,是否需要添加额外的.Append(crl

本文关键字:Append 添加 是否 crl StringBuilder AppendLine | 更新日期: 2023-09-27 17:58:06

我正在调整我在这里找到的一些代码:http://nicholas.piasecki.name/blog/2009/03/sending-raw-epl2-directly-to-a-zebra-lp2844-via-c/#comment-1636,但在VS2003/.NET1.1中,StringBuilder的AppendLine方法无法识别,所以我将其截断为.Append.

我现在需要在每次调用Append后添加#13#10左右吗?我假设这是AppendLine自动完成的。

当我使用StringBuilder.Append而不是.AppendLine时,是否需要添加额外的.Append(crl

是。

AppendLine()将附加其参数,然后是Environment.Newline
如果不调用AppendLine(),则需要自己包含换行符。

是。不过,要小心将其视为CRLF——StringBuilder内部使用Environment.Newline,因此值得自己使用Environments.Newline进行交叉兼容性。

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

编辑:我想,除非你因为硬件的原因特别需要使用CRLF。

StringBuilder.AppendLine 的解压缩源

/// <summary>
/// Appends the default line terminator to the end of the current <see cref="T:System.Text.StringBuilder"/> object.
/// 
/// </summary>
/// 
/// <returns>
/// A reference to this instance after the append operation has completed.
/// 
/// </returns>
/// <exception cref="T:System.ArgumentOutOfRangeException">Enlarging the value of this instance would exceed <see cref="P:System.Text.StringBuilder.MaxCapacity"/>.
///                 </exception><filterpriority>1</filterpriority>
[ComVisible(false)]
[__DynamicallyInvokable]
public StringBuilder AppendLine()
{
  return this.Append(Environment.NewLine);
}