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

209

В чем разница между двумя, если таковые имеются (по отношению к .Net)?

Прерак К
источник

Ответы:

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)

aloisdg переходит на codidact.com
источник
10
да :) По какой-то причине я ожидал, что реализация .NET будет какой-то огромной сложной функцией
developerbmw
Учитывая простоту источника в этом случае, он, вероятно, должен быть ответом.
Крис Уолтер
70

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

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

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

P папа
источник
Реализация Mac существует. Просто моно. Работает на что угодно.
Dykam
24
Просто примечание, это были бы старые макы; новые (OSX) Маков использовать\n
BlueRaja - Дэнни Pflughoeft
2
@Dykam, да, но он работает очень медленно на моем HP48gx
cod3monk3y
1
Как уже упоминали другие и как видно из источника .Net, также прикрепленного к этому вопросу, этот ответ не является правильным.
Крис Уолтер
2
@ Блик просто сказал, что это могло быть правдой в 2009 году, а не так. Я не проверял.
aloisdg переходит на codidact.com
23

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

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

Rony
источник
8

Из документов ...

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

JP Alioto
источник
4

Environment.NewLine выдаст «\ r \ n» при запуске в Windows. Если вы генерируете строки для сред на основе Unix, вам не нужен символ "\ r".

Джефф Фрикадельки Ян
источник
4

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

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

Яхья
источник