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

209

Qual é a diferença entre dois, se houver (com relação ao .Net)?

Prerak K
fonte

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.

Anthony
fonte
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)

aloisdg movendo-se para codidact.com
fonte
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.

P Papai
fonte
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

Rony
fonte
8

Dos documentos ...

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

JP Alioto
fonte
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".

Jeff Meatball Yang
fonte
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

Yahya
fonte