.NET "терминатор строки по умолчанию"? - PullRequest
25 голосов
/ 08 октября 2009

Есть ли способ выяснить, что .NET использует в качестве "ограничителя строки по умолчанию"? Например, документация для StringBuilder.AppendLine (String) гласит: «Добавляет копию указанной строки, за которой следует терминатор строки по умолчанию ...». Несколько текстовых классов в .NET ссылаются на одну и ту же концепцию.

Есть ли способ программно выяснить, что используется в качестве ограничителя строки (во время выполнения)? Или можно с уверенностью предположить, что это всегда будет "\ r \ n" для машины с Windows? Я бы предпочел не кодировать это значение в моем коде, если бы я мог его избежать.

Ответы [ 3 ]

43 голосов
/ 08 октября 2009

StringBuilder.AppendLine будет использовать Environment.NewLine, что означает "\r\n" для не-Unix-платформ и "\n" для Unix-платформ.

Это всегда будет "\r\n" для машины с Windows, но вы можете использовать Environment.NewLine вместо жестко заданного значения.

спасибо @Guffa за проверку

20 голосов
/ 08 октября 2009

Это код из метода StringBuilder.AppendLine(string) (с использованием .NET Reflector):

[ComVisible(false)]
public StringBuilder AppendLine(string value)
{
   this.Append(value);
   return this.Append(Environment.NewLine);
}

Как видите, он действительно использует свойство Environment.NewLine.

3 голосов
/ 09 ноября 2009

На Mac новой строкой был '\ r', пока они не основали свою ОС на Linux Теперь это '\ n'.

...