it-swarm-tr.com

.NET'te bir biçim dizesinde kaşlı ayraçlar (küme parantezleri) nasıl kullanılır

Parantez string.Format kullanarak nasıl kaçabilir. Örneğin:

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

Bu örnek bir istisna atmaz, ancak foo {0} dizesini çıkarır

Parantezden kaçmanın bir yolu var mı?

924
Pop Catalin

foo {1, 2, 3} çıktısı için aşağıdakileri yapmalısınız:

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

Bir { çıktısı almak için {{ kullanın ve bir } çıktısı almak için }} kullanın.

1218
Jorge Ferreira

Evet { içinde string.Format çıktısı için: {{

Yani bu

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

"foo {1,2,3}" çıktısını alacak.

AMA C # 'daki bir tasarım hatası hakkında bilmek zorundasınız ki yukarıdaki mantıktan geçerek bu kodun {24.00} yazacağını farz edersiniz.

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

Ancak bu {N} yazdırır. Bunun nedeni C # 'nın kaçış dizilerini ayrıştırma ve karakterleri biçimlendirmesidir. Yukarıdaki durumda istenen değeri elde etmek için bunun yerine bunu kullanmak zorundasınız.

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

Referans Makaleleri String.Format gottach ve Dize Biçimlendirme SSS

199
Guru Kara

Neredeyse! Bir ayraç için kaçış dizisi {{ veya }} şeklindedir; bu nedenle, örneğin kullanmanız gereken:

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

Sayfanızda yalnızca bir braketi gösterecek olan çift açma braketlerini ve çift kapatma braketlerini kullanabilirsiniz.

22
elec

Kaçış küme parantezleri VE kullanma string interpolation ilginç bir meydan okuma için yapar. string interpolation ayrıştırma ve string.format ayrıştırma işleminden kaçmak için dört köşeli ayraçlar kullanmanız gerekir.

Kaçış Parantez: String Interpolation $ ("") ve 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

Burada json dizeleri ad-hoc (bir sınıf/nesne serileştirmeden) C # dilinde nasıl oluşturulduğunu araştırmaya geldi. Başka bir deyişle, C # 'daki İnterpolasyonlu Dizeler ve " sözlü dize değişmezleri " (' @ 'öneki ile çift tırnaklı dizeler) kullanılırken, parantez ve tırnaklardan nasıl kaçılır? .

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

veya bunun gibi c # string enterpolasyonunu kullanabilirsiniz (C # 6.0'da bulunur)

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

Hedefim:

"{CR}{LF}" değerini, string değişkenine delimiter olarak atamam gerekiyordu.

c # kodu:

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

Not: Normalde özel karakterlerden kaçmak için kullanmanız gerekir. Kıvrımlı ayracı {açmak için, {{gibi bir tane daha kullanın. Kıvrımlı braketi kapatmak için} bir ekstra}} kullanın.

0
Goldfish