Unterschied zwischen "\ n" und Environment.NewLine


Antworten:


203

Kommt auf die Plattform an. Unter Windows ist es tatsächlich "\ r \ n".

Von MSDN:

Eine Zeichenfolge mit "\ r \ n" für Nicht-Unix-Plattformen oder eine Zeichenfolge mit "\ n" für Unix-Plattformen.


5
Welche UNIX-Plattform führt .NET unter Microsoft in sein Dokument ein? (Ich meine, ein Teil von Mono.)
Jack

10
@ Jack Sie könnten in eine Datei schreiben, die auf der Unix-Plattform geöffnet wird. Oder senden Sie Text in einem Paket, das von einer Unix-Plattform empfangen wird. Und in ein paar Monaten wird .net auf Unix-Plattformen laufen. Es hat bereits begonnen
John Demetriou

Also nur aus Gründen der Übersichtlichkeit: Auf einer Nicht-Unix-Plattform Environment.NewLinewird \r\naber \nauch "New Line" genannt. Warum haben sie letztere nicht einfach bei ihrem bekannteren Namen "Zeilenvorschub" genannt und die Verwirrung beseitigt? Sie hätten auch gebrauchen können \l.
rory.ap

156

Genaue Implementierung Environment.NewLineaus dem Quellcode:

Die Implementierung 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";
    }
}

Quelle


Die Implementierung 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
    }
}

Quelle (in System.Private.CoreLib)

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

Quelle (in System.Runtime.Extensions)


10
yeah :) Aus irgendeinem Grund hatte ich erwartet, dass die .NET-Implementierung eine sehr komplizierte Funktion sein würde
Developerbmw

In Anbetracht der Einfachheit der Quelle in diesem Fall sollte dies wahrscheinlich die Antwort sein.
Chris Walter

70

Gibt, wie andere bereits erwähnt haben, Environment.NewLineeine plattformspezifische Zeichenfolge zum Beginnen einer neuen Zeile zurück. Dies sollte sein:

  • "\r\n" (\ u000D \ u000A) für Windows
  • "\n" (\ u000A) für Unix
  • "\r" (\ u000D) für Mac (falls eine solche Implementierung vorhanden war)

Beachten Sie, dass beim Schreiben in die Konsole Environment.NewLine nicht unbedingt erforderlich ist. Der Konsolen-Stream wird "\n"bei Bedarf in die entsprechende neue Zeilenfolge übersetzt .


Die Mac-Implementierung ist vorhanden. Nur Mono. Läuft auf irgendetwas.
Dykam

24
Nur eine Anmerkung, das wären alte Macs; neue (OSX) Macs verwenden\n
BlueRaja - Danny Pflughoeft

2
@Dykam, ja, aber es läuft sehr langsam auf meinem HP48gx
cod3monk3y

1
Wie andere erwähnt haben und wie in der .Net-Quelle auch dieser Frage beigefügt ist, ist diese Antwort nicht korrekt.
Chris Walter

2
@Blieque sagt nur, dass es 2009 wahr gewesen sein könnte, nicht dass es wahr war. Ich habe nicht nachgesehen.
Aloisdg wechselt zu codidact.com

23

Environment.NewLine gibt das Zeilenumbruchzeichen für die entsprechende Plattform zurück, auf der Ihr Code ausgeführt wird

Sie werden dies sehr nützlich finden, wenn Sie Ihren Code unter Linux im Mono- Framework bereitstellen


8

Aus den Dokumenten ...

Eine Zeichenfolge mit "\ r \ n" für Nicht-Unix-Plattformen oder eine Zeichenfolge mit "\ n" für Unix-Plattformen.


4

Environment.NewLine gibt unter Windows "\ r \ n" aus. Wenn Sie Zeichenfolgen für Unix-basierte Umgebungen generieren, möchten Sie kein "\ r".


4

Sie könnten Probleme bekommen, wenn Sie versuchen, mehrzeilige Nachrichten anzuzeigen, die durch "\ r \ n" getrennt sind.

Es ist immer eine gute Praxis, Dinge auf normale Weise zu tun und Environment.NewLine zu verwenden

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.