Разница между «\ 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.