Unterschied zwischen "\ n" und Environment.NewLine

208

Was ist der Unterschied zwischen zwei, falls vorhanden (in Bezug auf .Net)?

Prerak K.
quelle

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.

Anthony
quelle
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)

aloisdg wechselt zu codidact.com
quelle
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 .

P Papa
quelle
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

Rony
quelle
8

Aus den Dokumenten ...

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

JP Alioto
quelle
4

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

Jeff Fleischbällchen Yang
quelle
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

Yahya
quelle