Різниця між "\ n" та середовищем.NewLine


Відповіді:


203

Залежить від платформи. У Windows це насправді "\ r \ n".

Від MSDN:

Рядок, що містить "\ r \ n" для платформ, які не є Unix, або рядок, що містить "\ n" для платформ Unix.


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

10
@Jack Ви можете писати файл, який буде відкрито на платформі Unix. Або відправлення тексту в пакеті, який отримає платформа Unix. А через кілька місяців .net буде працювати на платформах Unix. Це вже почалося
Джон Деметриу

Тож для наочності: на платформі, що не Environment.NewLineє Unix, є, \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 існує. Просто Моно. Працює на чому завгодно.
Дікам

24
Просто примітка, що це були б старі маки; нові (OSX) Маков використовувати\n
BlueRaja - Денні Pflughoeft

2
@Dykam, так, але він працює реально повільно, як на моєму HP48gx
cod3monk3y

1
Як уже згадували інші, і як це видно в джерелі .Net, також доданому до цього питання, ця відповідь не є правильною.
Кріс Вальтер

2
@Blieque просто сказала, що це могло бути правдою в 2009 році, не так. Я не перевіряв.
aloisdg переходить на codidact.com

23

Environment.NewLine поверне символ нового рядка для відповідної платформи, на якій працює ваш код

Ви знайдете це дуже корисним, коли розгорнете свій код в Linux на Mono Framework




4

Ви можете зіткнутися з проблемою, коли спробуєте відобразити багаторядкове повідомлення, розділене символом "\ r \ n".

Завжди є хорошою практикою робити речі стандартним чином та використовувати Environment.NewLine

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.