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.