Dalam. NET saya dapat memberikan keduanya \r
atau \n
string literal, tetapi ada cara untuk memasukkan sesuatu seperti karakter "baris baru" seperti Environment.NewLine
properti statis?
Dalam. NET saya dapat memberikan keduanya \r
atau \n
string literal, tetapi ada cara untuk memasukkan sesuatu seperti karakter "baris baru" seperti Environment.NewLine
properti statis?
Jawaban:
Nah, opsi sederhana adalah:
string.Format
:
string x = string.Format("first line{0}second line", Environment.NewLine);
Rangkaian string:
string x = "first line" + Environment.NewLine + "second line";
Interpolasi string (dalam C # 6 dan di atas):
string x = $"first line{Environment.NewLine}second line";
Anda juga dapat menggunakan \ n di mana-mana, dan mengganti:
string x = "first line\nsecond line\nthird line".Replace("\n",
Environment.NewLine);
Perhatikan bahwa Anda tidak dapat menjadikan ini string konstan , karena nilai Environment.NewLine
hanya akan tersedia pada waktu eksekusi.
Environment.NewLine
? Justru sebaliknya, itu adalah praktik yang baik untuk menggunakannya
Jika Anda menginginkan string const yang berisi Environment.NewLine di dalamnya, Anda dapat melakukan sesuatu seperti ini:
const string stringWithNewLine =
@"first line
second line
third line";
Karena ini dalam string const maka dilakukan dalam waktu kompilasi karena itu adalah interpretasi kompiler dari baris baru. Sepertinya saya tidak dapat menemukan referensi yang menjelaskan perilaku ini, tetapi, saya bisa membuktikannya berfungsi sebagaimana dimaksud. Saya mengkompilasi kode ini pada Windows dan Ubuntu (dengan Mono) kemudian dibongkar dan ini adalah hasilnya:
Seperti yang Anda lihat, di baris baru Windows ditafsirkan sebagai \ r \ n dan di Ubuntu sebagai \ n
var sb = new StringBuilder();
sb.Append(first);
sb.AppendLine(); // which is equal to Append(Environment.NewLine);
sb.Append(second);
return sb.ToString();
first + Environment.NewLine + second
yang lebih efisien dan (IMO) lebih mudah dibaca?
String.Format
akan menghasilkan 1 string sekaligus (tapi secara internal agak lambat karena rangkaian budaya tertentu, dll), sementara rangkaian string - 1 menghasilkan +1 sementara, kan?
String.Concatenate
, yang secara langsung membangun hanya satu string keluaran (IIRC, jika stringnya literal, penggabungannya dilakukan dalam kompiler.
"a"+b+"c"+d
, dll) dengan kinerja sama dengan satu? Atau baru saja dikonversi ke String.Concatenate(a,b,c,d,etc)
, kan?
string.Format
dalam komentar. Rangkaian string tidak akan menghasilkan string sementara, karena kompiler akan memanggil string.Concat(first, Environment.NewLine, second)
.
Satu lagi cara penempatan yang mudah dari Environment.NewLine dalam format string. Idenya adalah untuk membuat metode ekstensi string yang memformat string seperti biasa tetapi juga menggantikan {nl} dalam teks dengan Environment.NewLine
Pemakaian
" X={0} {nl} Y={1}{nl} X+Y={2}".FormatIt(1, 2, 1+2);
gives:
X=1
Y=2
X+Y=3
Kode
///<summary>
/// Use "string".FormatIt(...) instead of string.Format("string, ...)
/// Use {nl} in text to insert Environment.NewLine
///</summary>
///<exception cref="ArgumentNullException">If format is null</exception>
[StringFormatMethod("format")]
public static string FormatIt(this string format, params object[] args)
{
if (format == null) throw new ArgumentNullException("format");
return string.Format(format.Replace("{nl}", Environment.NewLine), args);
}
Catatan
Jika Anda ingin ReSharper menyorot parameter Anda, tambahkan atribut ke metode di atas
[StringFormatMethod ("format")]
Implementasi ini jelas kurang efisien daripada hanya String.Format
Mungkin satu, yang tertarik pada pertanyaan ini akan tertarik pada pertanyaan berikutnya juga: Named string formating in C #
string myText =
@"<div class=""firstLine""></div>
<div class=""secondLine""></div>
<div class=""thirdLine""></div>";
bukan itu:
string myText =
@"<div class=\"firstLine\"></div>
<div class=\"secondLine\"></div>
<div class=\"thirdLine\"></div>";
static class MyClass
{
public const string NewLine="\n";
}
string x = "first line" + MyClass.NewLine + "second line"
Environment.NewLine
- lihat jawaban lainnya.
const string
versi .net yang lebih baru memungkinkan Anda untuk menggunakan $ di depan literal yang memungkinkan Anda untuk menggunakan variabel di dalam seperti berikut:
var x = $"Line 1{Environment.NewLine}Line 2{Environment.NewLine}Line 3";
Jika Anda benar-benar menginginkan string Baris Baru sebagai konstanta, maka Anda dapat melakukan ini:
public readonly string myVar = Environment.NewLine;
Pengguna kata kunci hanya baca dalam C # berarti bahwa variabel ini hanya dapat ditetapkan satu kali. Anda dapat menemukan dokumentasi di sini . Ini memungkinkan deklarasi variabel konstan yang nilainya tidak diketahui sampai waktu eksekusi.
Jika Anda bekerja dengan aplikasi Web, Anda dapat mencoba ini.
StringBuilder sb = new StringBuilder();
sb.AppendLine("Some text with line one");
sb.AppendLine("Some mpre text with line two");
MyLabel.Text = sb.ToString().Replace(Environment.NewLine, "<br />")
Jika saya mengerti pertanyaan: Pasangan "\r\n"
untuk mendapatkan baris baru di bawah ini dalam textbox
. Contoh saya berhasil -
string s1 = comboBox1.Text; // s1 is the variable assigned to box 1, etc.
string s2 = comboBox2.Text;
string both = s1 + "\r\n" + s2;
textBox1.Text = both;
Sebuah jawaban yang khas bisa s1
s2
di text box
jenis gaya didefinisikan menggunakan.