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

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

7 ответов

Решение

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

Из MSDN:

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

Точная реализация 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)

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

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

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

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

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

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

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

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

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

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

Другие вопросы по тегам