Diferencia entre "\ n" y Environment.NewLine

Respuestas:

203

Depende de la plataforma. En Windows, en realidad es "\ r \ n".

De MSDN:

Una cadena que contiene "\ r \ n" para plataformas que no son Unix, o una cadena que contiene "\ n" para plataformas Unix.

Antonio
fuente
55
¿Qué plataforma UNIX ejecuta .NET para Microsoft en su documento? (Quiero decir, una parte de Mono.)
Jack
10
@Jack Podría estar escribiendo en un archivo que se abrirá en la plataforma Unix. O enviando texto en un paquete que será recibido por una plataforma Unix. Y en unos meses .net se ejecutará en plataformas Unix. Ya ha comenzado
John Demetriou
Entonces, solo para mayor claridad: en una plataforma que no Environment.NewLinees Unix, \r\npero \ntambién se llama "nueva línea". ¿Por qué no simplemente llamaron a este último por su nombre más conocido "avance de línea" y eliminaron la confusión? Podrían haber usado \ltambién.
rory.ap
157

Implementación exacta del Environment.NewLinecódigo fuente:

La implementación en .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";
    }
}

fuente


La implementación en .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
    }
}

fuente (en System.Private.CoreLib)

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

fuente (en System.Runtime.Extensions)

aloisdg se muda a codidact.com
fuente
10
sí :) Por alguna razón, esperaba que la implementación de .NET fuera una función enormemente complicada
developerbmw
Teniendo en cuenta la simplicidad de la fuente en este caso, probablemente debería ser la respuesta.
Chris Walter
70

Como otros han mencionado, Environment.NewLinedevuelve una cadena específica de plataforma para comenzar una nueva línea, que debería ser:

  • "\r\n" (\ u000D \ u000A) para Windows
  • "\n" (\ u000A) para Unix
  • "\r" (\ u000D) para Mac (si existiera dicha implementación)

Tenga en cuenta que al escribir en la consola, Environment.NewLine no es estrictamente necesario. La transmisión de la consola se traducirá "\n"a la secuencia de nueva línea apropiada, si es necesario.

Papi
fuente
La implementación de Mac existe. Solo mono Se ejecuta en cualquier cosa.
Dykam
24
Solo una nota, eso sería un viejo Mac; nuevo uso de \n
Mac
2
@Dykam, sí, pero funciona muy lento en mi HP48gx
cod3monk3y
1
Como otros han mencionado y como es visible en la fuente .Net también adjunta a esta pregunta, esta respuesta no es correcta.
Chris Walter el
2
@Blieque solo dice que podría haber sido cierto en 2009, no que lo fuera. No lo comprobé.
aloisdg se muda a codidact.com el
23

Environment.NewLine devolverá el carácter de nueva línea para la plataforma correspondiente en la que se está ejecutando su código

Esto le resultará muy útil cuando implemente su código en Linux en el marco Mono

Rony
fuente
8

De los documentos ...

Una cadena que contiene "\ r \ n" para plataformas que no son Unix, o una cadena que contiene "\ n" para plataformas Unix.

JP Alioto
fuente
4

Environment.NewLine dará "\ r \ n" cuando se ejecute en Windows. Si está generando cadenas para entornos basados ​​en Unix, no desea el "\ r".

Jeff Meatball Yang
fuente
4

Puede tener problemas cuando intente mostrar un mensaje de varias líneas separado con "\ r \ n".

Siempre es una buena práctica hacer las cosas de manera estándar y usar el entorno.

Yahya
fuente