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.


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)


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.


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


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.


4

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


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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.