Разница между «\ n» и окружающей средой. NewLine


Ответы:


203

Зависит от платформы. На Windows это на самом деле "\ r \ n".

Из MSDN:

Строка, содержащая «\ r \ n» для не-Unix-платформ, или строка, содержащая «\ n» для Unix-платформ.


5
На какой платформе UNIX Microsoft запускает .NET? (Я имею в виду, часть из Mono.)
Джек,

10
@Jack Вы могли бы писать в файл, который будет открыт на платформе Unix. Или отправка текста в пакете, который будет получен платформой Unix. И через несколько месяцев .net будет работать на платформах Unix. Это уже началось
Джон Деметриу

Так что просто для ясности: на не-Unix-платформе Environment.NewLineесть, \r\nно \nее еще называют «новая линия». Почему они просто не назвали последнее своим более известным названием «перевод строки» и не устранили путаницу? Они могли бы \lтакже использовать .
rory.ap

157

Точная реализация Environment.NewLineиз исходного кода:

Реализация в .NET 4.6.1:

/*===================================NewLine====================================
**Action: A property which returns the appropriate newline string for the given
**        platform.
**Returns: \r\n on Win32.
**Arguments: None.
**Exceptions: None.
==============================================================================*/
public static String NewLine {
    get {
        Contract.Ensures(Contract.Result<String>() != null);
        return "\r\n";
    }
}

источник


Реализация в .NET Core:

/*===================================NewLine====================================
**Action: A property which returns the appropriate newline string for the
**        given platform.
**Returns: \r\n on Win32.
**Arguments: None.
**Exceptions: None.
==============================================================================*/
public static String NewLine {
    get {
        Contract.Ensures(Contract.Result() != null);
#if !PLATFORM_UNIX
        return "\r\n";
#else
        return "\n";
#endif // !PLATFORM_UNIX
    }
}

источникSystem.Private.CoreLib)

public static string NewLine => "\r\n";

источникSystem.Runtime.Extensions)


10
да :) По какой-то причине я ожидал, что реализация .NET будет какой-то огромной сложной функцией
developerbmw

Учитывая простоту источника в этом случае, он, вероятно, должен быть ответом.
Крис Уолтер

70

Как уже упоминалось, Environment.NewLineвозвращает специфичную для платформы строку для начала новой строки, которая должна быть:

  • "\r\n" (\ u000D \ u000A) для Windows
  • "\n" (\ u000A) для Unix
  • "\r" (\ u000D) для Mac (если такая реализация существовала)

Обратите внимание, что при записи в консоль Environment.NewLine не является строго обязательным. Поток консоли будет преобразован "\n"в соответствующую последовательность новой строки, если это необходимо.


Реализация Mac существует. Просто моно. Работает на что угодно.
Dykam

24
Просто примечание, это были бы старые макы; новые (OSX) Маков использовать\n
BlueRaja - Дэнни Pflughoeft

2
@Dykam, да, но он работает очень медленно на моем HP48gx
cod3monk3y

1
Как уже упоминали другие и как видно из источника .Net, также прикрепленного к этому вопросу, этот ответ не является правильным.
Крис Уолтер

2
@ Блик просто сказал, что это могло быть правдой в 2009 году, а не так. Я не проверял.
aloisdg переходит на codidact.com

23

Environment.NewLine вернет символ новой строки для соответствующей платформы, на которой работает ваш код

вы найдете это очень полезно при развертывании кода в Linux на Mono рамках




4

Вы можете столкнуться с проблемами, когда попытаетесь отобразить многострочное сообщение, разделенное «\ r \ n».

Это всегда хорошая практика, чтобы делать вещи стандартным способом и использовать Environment.NewLine

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.