Терминатор строки по умолчанию .NET?

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

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


person Hank    schedule 08.10.2009    source источник


Ответы (3)


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

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

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

person Donut    schedule 08.10.2009
comment
Ах, отлично, я знал, что должно быть что-то подобное. Спасибо! - person Hank; 08.10.2009
comment
хотелось бы, чтобы был способ изменить терминатор строки по умолчанию для конкретного объекта StringBuilder - person Alex; 05.07.2012

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

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

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

person Guffa    schedule 08.10.2009

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

person HG.    schedule 09.11.2009
comment
Небольшая придирка: сегодняшняя Mac OS на самом деле основана на UNIX, а не на Linux. А первая версия для UNIX появилась в начале 2001 года, примерно за год до выпуска .NET. Таким образом, обозначение '\r' какое-то время не имело значения. - person Hank; 20.06.2011