Perbedaan antara "\ n" dan Lingkungan.NewLine

209

Apa perbedaan antara keduanya, jika ada (berkenaan dengan .Net)?

Prerak K
sumber

Jawaban:

203

Tergantung pada platform. Di Windows sebenarnya "\ r \ n".

Dari MSDN:

String yang berisi "\ r \ n" untuk platform non-Unix, atau string yang berisi "\ n" untuk platform Unix.

anthony
sumber
5
Platform UNIX mana .NET yang dijalankan oleh Microsoft dimasukkan ke dalam dokumen? (Maksud saya, bagian dari Mono.)
Jack
10
@Jack Anda bisa menulis ke file yang akan dibuka di platform Unix. Atau mengirim teks dalam paket yang akan diterima oleh platform unix. Dan dalam beberapa bulan .net akan berjalan pada platform Unix. Sudah dimulai
John Demetriou
Jadi hanya untuk kejelasan: pada platform non-Unix Environment.NewLineadalah \r\ntetapi \njuga disebut "baris baru". Mengapa mereka tidak memanggil yang terakhir dengan nama yang lebih dikenal sebagai "umpan garis" dan memotong kebingungan? Mereka bisa menggunakannya \ljuga.
rory.ap
157

Implementasi yang tepat dari Environment.NewLinedari kode sumber:

Implementasi di .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";
    }
}

sumber


Implementasi dalam .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
    }
}

sumber (dalam System.Private.CoreLib)

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

sumber (dalam System.Runtime.Extensions)

aloisdg pindah ke codidact.com
sumber
10
yeah :) Untuk beberapa alasan saya mengharapkan implementasi .NET menjadi beberapa fungsi rumit yang besar
developerbmw
Mempertimbangkan kesederhanaan sumber dalam hal ini, mungkin itu harus menjadi jawabannya.
Chris Walter
70

Seperti yang disebutkan orang lain, Environment.NewLinemengembalikan string khusus platform untuk memulai baris baru, yang seharusnya:

  • "\r\n" (\ u000D \ u000A) untuk Windows
  • "\n" (\ u000A) untuk Unix
  • "\r" (\ u000D) untuk Mac (jika implementasi seperti itu ada)

Perhatikan bahwa saat menulis ke konsol, Environment.NewLine tidak sepenuhnya diperlukan. Aliran konsol akan menerjemahkan "\n"ke urutan baris baru yang sesuai, jika perlu.

P Ayah
sumber
Implementasi Mac memang ada. Hanya Mono. Berjalan pada apa saja.
Dykam
24
Hanya sebuah catatan, itu akan menjadi mac lama; Mac (OSX) baru digunakan\n
BlueRaja - Danny Pflughoeft
2
@Dykam, ya tapi itu berjalan sangat lambat seperti pada HP48gx saya
cod3monk3y
1
Seperti yang telah disebutkan orang lain dan seperti terlihat dalam sumber .Net juga terlampir pada pertanyaan ini, jawaban ini tidak benar.
Chris Walter
2
@Blieque hanya mengatakan bahwa itu mungkin benar pada tahun 2009, bukan itu. Saya tidak memeriksa.
aloisdg pindah ke codidact.com
23

Environment.NewLine akan mengembalikan karakter baris baru untuk platform terkait di mana kode Anda berjalan

Anda akan menemukan ini sangat berguna ketika Anda menggunakan kode Anda di linux pada kerangka Mono

Rony
sumber
8

Dari dokumen ...

String yang berisi "\ r \ n" untuk platform non-Unix, atau string yang berisi "\ n" untuk platform Unix.

JP Alioto
sumber
4

Environment.NewLine akan memberikan "\ r \ n" saat dijalankan di Windows. Jika Anda membuat string untuk lingkungan berbasis Unix, Anda tidak ingin "\ r".

Jeff Meatball Yang
sumber
4

Anda mungkin mendapat masalah ketika Anda mencoba untuk menampilkan pesan multi-line yang dipisahkan dengan "\ r \ n".

Itu selalu merupakan praktik yang baik untuk melakukan hal-hal dengan cara standar, dan menggunakan Lingkungan

Yahya
sumber