it-swarm-id.com

Cara melepaskan kawat gigi (kurung keriting) dalam format string dalam .NET

Bagaimana kurung bisa diloloskan menggunakan string.Format. Sebagai contoh:

String val = "1,2,3"
String.Format(" foo {{0}}", val); 

Contoh ini tidak melempar pengecualian, tetapi menghasilkan string foo {0}

Apakah ada cara untuk keluar dari kurung?

924
Pop Catalin

Bagi Anda untuk menghasilkan foo {1, 2, 3} Anda harus melakukan sesuatu seperti:

string t = "1, 2, 3";
string v = String.Format(" foo {{{0}}}", t);

Untuk menghasilkan { Anda menggunakan {{ dan untuk menghasilkan } Anda menggunakan }}.

1218
Jorge Ferreira

Ya untuk menampilkan { di string.Format Anda harus menghindarinya seperti ini {{

Jadi ini

String val = "1,2,3";
String.Format(" foo {{{0}}}", val);

akan menampilkan "foo {1,2,3}".

TETAPI Anda harus tahu tentang bug desain di C # yang dengan pergi pada logika di atas Anda akan menganggap kode di bawah ini akan mencetak {24.00}

int i = 24;
string str = String.Format("{{{0:N}}}", i); //gives '{N}' instead of {24.00}

Tapi ini mencetak {N}. Ini karena cara C # mem-parsing lolos dari urutan dan memformat karakter. Untuk mendapatkan nilai yang diinginkan dalam kasus di atas, Anda harus menggunakan ini.

String.Format("{0}{1:N}{2}", "{", i, "}") //evaluates to {24.00}

Referensi Artikel String.Format gottach dan FAQ Pemformatan String

199
Guru Kara

Hampir sampai! Urutan escape untuk brace adalah {{ atau }} jadi untuk contoh Anda, Anda akan menggunakan:

string t = "1, 2, 3";
string v = String.Format(" foo {{{0}}}", t);
72
Wolfwyrd

Anda dapat menggunakan kurung buka ganda dan kurung tutup ganda yang hanya akan menampilkan satu braket pada halaman Anda.

22
elec

Melarikan diri kurung keriting DAN menggunakan interpolasi string membuat tantangan yang menarik. Anda harus menggunakan kurung quadruple untuk keluar dari interpolasi string parsing dan parsing string.format.

Escaping Brackets: Interpolasi String $ ("") dan String.Format

string localVar = "dynamic";
string templateString = [email protected]"<h2>{0}</h2><div>this is my {localVar} template using a {{{{custom tag}}}}</div>";
string result = string.Format(templateString, "String Interpolation");

// OUTPUT: <h2>String Interpolation</h2><div>this is my dynamic template using a {custom tag}</div>
12

Datang ke sini untuk mencari cara membuat string json ad-hoc (tanpa membuat serial kelas/objek) di C #. Dengan kata lain, bagaimana cara melepaskan kurung kurawal dan kutipan saat menggunakan Interpolated Strings dalam C # dan " string kata demi kata " (string yang dikutip ganda dengan awalan '@'), seperti .. .

var json = [email protected]"{{""name"":""{name}""}}";
6
Adam Cox
[TestMethod]
public void BraceEscapingTest()
{
    var result = String.Format("Foo {{0}}", "1,2,3");  //"1,2,3" is not parsed
    Assert.AreEqual("Foo {0}", result);

    result = String.Format("Foo {{{0}}}", "1,2,3");
    Assert.AreEqual("Foo {1,2,3}", result);

    result = String.Format("Foo {0} {{bar}}", "1,2,3");
    Assert.AreEqual("Foo 1,2,3 {bar}", result);

    result = String.Format("{{{0:N}}}", 24); //24 is not parsed, see @Guru Kara answer
    Assert.AreEqual("{N}", result);

    result = String.Format("{0}{1:N}{2}", "{", 24, "}");
    Assert.AreEqual("{24.00}", result);

    result = String.Format("{{{0}}}", 24.ToString("N"));
    Assert.AreEqual("{24.00}", result);
}
5
pomber

atau Anda dapat menggunakan c # string interpolasi seperti ini (fitur tersedia di C # 6.0)

var value = "1, 2, 3";
var output = $" foo {{{value}}}";
2
Aarif

Tujuan saya:

Saya perlu menetapkan nilai "{CR}{LF}" ke variabel stringdelimiter.

Kode c #:

string delimiter= "{{CR}}{{LF}}";

Catatan: Untuk keluar dari karakter khusus biasanya Anda harus menggunakan. Untuk membuka braket keriting {, gunakan satu ekstra seperti {{. Untuk menutup braket keriting}, gunakan satu tambahan}}.

0
Goldfish