Diferença entre "\ n" e Environment.NewLine


Respostas:


203

Depende da plataforma. No Windows, é realmente "\ r \ n".

Do MSDN:

Uma sequência contendo "\ r \ n" para plataformas não Unix ou uma sequência contendo "\ n" para plataformas Unix.


5
Qual plataforma UNIX o .NET executa para a Microsoft coloca em seu documento? (Quer dizer, uma parte de Mono.)
Jack

10
@ Jack Você pode estar gravando em um arquivo que será aberto na plataforma Unix. Ou enviando texto em pacote que será recebido por uma plataforma unix. E em alguns meses o .net estará rodando nas plataformas Unix. Ele já começou
John Demetriou

Então, apenas para maior clareza: em uma plataforma não-Unix Environment.NewLineé, \r\nmas \ntambém é chamado de "nova linha". Por que eles não chamaram o último pelo seu nome mais conhecido "feed de linha" e eliminaram a confusão? Eles poderiam ter usado \ltambém.
rory.ap

157

Implementação exata do Environment.NewLinecódigo fonte:

A implementação no .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";
    }
}

fonte


A implementação no .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
    }
}

fonte (pol System.Private.CoreLib)

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

fonte (pol System.Runtime.Extensions)


10
sim :) Por alguma razão eu estava esperando a implementação .NET ser algum enorme função complicada
developerbmw

Considerando a simplicidade da fonte nesse caso, provavelmente deve ser a resposta.
Chris Walter

70

Como outros já mencionaram, Environment.NewLineretorna uma string específica da plataforma para iniciar uma nova linha, que deve ser:

  • "\r\n" (\ u000D \ u000A) para Windows
  • "\n" (\ u000A) para Unix
  • "\r" (\ u000D) para Mac (se essa implementação existir)

Observe que, ao gravar no console, o Environment.NewLine não é estritamente necessário. O fluxo do console será convertido "\n"para a sequência de nova linha apropriada, se necessário.


A implementação do Mac existe. Apenas Mono. É executado em qualquer coisa.
dykam

24
Apenas uma observação: seriam macs antigos; uso de macs (OSX) novo\n
BlueRaja - Danny Pflughoeft 4/11

2
@Dykam, sim, mas ele corre bem devagar-like no meu HP48GX
cod3monk3y

1
Como outros já mencionaram e como é visível na fonte .Net também anexada a essa pergunta, essa resposta não está correta.
Chris Walter

2
@ Blieque apenas dizendo que poderia ter sido verdade em 2009, não que fosse. Eu não verifiquei.
aloisdg movendo-se para codidact.com

23

Environment.NewLine retornará o caractere de nova linha para a plataforma correspondente na qual seu código está sendo executado

você achará isso muito útil quando implantar seu código no linux no framework Mono


8

Dos documentos ...

Uma sequência contendo "\ r \ n" para plataformas não Unix ou uma sequência contendo "\ n" para plataformas Unix.


4

Environment.NewLine fornecerá "\ r \ n" quando executado no Windows. Se você está gerando strings para ambientes baseados em Unix, não deseja o "\ r".


4

Você pode ter problemas ao tentar exibir mensagens de várias linhas separadas por "\ r \ n".

É sempre uma boa prática fazer as coisas de maneira padrão e usar o Environment.NewLine

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.