Differenza tra "\ n" e Environment.NewLine


Risposte:


208

Dipende dalla piattaforma. Su Windows è effettivamente "\ r \ n".

Da MSDN:

Una stringa contenente "\ r \ n" per piattaforme non Unix o una stringa contenente "\ n" per piattaforme Unix.


5
Quale piattaforma UNIX viene eseguita da .NET per Microsoft inserita nel suo documento? (Voglio dire, una parte da Mono.)
Jack

10
@Jack Potresti scrivere su un file che verrà aperto nella piattaforma Unix. O l'invio di testo nel pacchetto che verrà ricevuto da una piattaforma unix. E tra pochi mesi .net funzionerà su piattaforme Unix. È già iniziato
John Demetriou

Quindi solo per chiarezza: su una piattaforma non Unix Environment.NewLineè \r\nma \nviene anche chiamata "nuova linea". Perché non hanno chiamato semplicemente quest'ultimo con il suo nome più noto "line feed" e hanno eliminato la confusione? Avrebbero potuto usare \lanche.
rory.ap

161

Esatta implementazione di Environment.NewLinedal codice sorgente:

L'implementazione in .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


L'implementazione in .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 (in System.Private.CoreLib)

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

fonte (in System.Runtime.Extensions)


11
yeah :) Per qualche motivo mi aspettavo che l'implementazione di .NET fosse una funzione enorme e complicata
Developerbmw

Considerando la semplicità della fonte in questo caso, probabilmente dovrebbe essere la risposta.
Chris Walter

70

Come altri hanno già detto, Environment.NewLinerestituisce una stringa specifica della piattaforma per iniziare una nuova riga, che dovrebbe essere:

  • "\r\n" (\ u000D \ u000A) per Windows
  • "\n" (\ u000A) per Unix
  • "\r" (\ u000D) per Mac (se tale implementazione esisteva)

Notare che quando si scrive sulla console, Environment.NewLine non è strettamente necessario. "\n"Se necessario, il flusso della console si tradurrà nella sequenza di nuova riga appropriata.


L'implementazione per Mac esiste. Solo Mono. Funziona su qualsiasi cosa.
Dykam

24
Solo una nota, sarebbero vecchi Mac; nuovo uso di \n
mac

2
@Dykam, sì, ma funziona molto lentamente sul mio HP48gx
cod3monk3y

1
Come altri hanno già detto e come è visibile nella fonte .Net anche allegata a questa domanda, questa risposta non è corretta.
Chris Walter

2
@Blieque diceva solo che avrebbe potuto essere vero nel 2009, non che lo fosse. Non ho controllato.
aloisdg si trasferisce su codidact.com il

25

Environment.NewLine restituirà il carattere di nuova riga per la piattaforma corrispondente in cui è in esecuzione il codice

lo troverai molto utile quando distribuirai il tuo codice in Linux sul framework Mono


8

Dai documenti ...

Una stringa contenente "\ r \ n" per piattaforme non Unix o una stringa contenente "\ n" per piattaforme Unix.


5

Potresti avere problemi quando provi a visualizzare un messaggio su più righe separato da "\ r \ n".

È sempre una buona pratica fare le cose in modo standard e utilizzare Environment.NewLine


4

Environment.NewLine darà "\ r \ n" se eseguito su Windows. Se stai generando stringhe per ambienti basati su Unix, non vuoi il "\ r".

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.