2015-12-10 42 views
5

{{ ve }} kullanarak C# 'da küme parantezinden kurtulabileceğimizi biliyorum. Ancak, bir biçim değiştiriciden ({0:F6} gibi) sonra doğrularlarsa iyi çalışmazlar.C# küme parantez biçimi biçimlendirici ile çalışmıyor?

string str; 

// Prints "{3.14}" as expected 
str = string.Format("{{{0}}}", 3.14); 
Console.WriteLine(str); 

// Expected "{3.140000}", found "{F6}" 
str = string.Format("{{{0:F6}}}", 3.14); 
Console.WriteLine(str); 
+2

Neden olmasın sadece 'str = "{" + string.Format ("{0: F6}", 3.14) + "}"; – Pikoh

+2

@Pikoh sanırım soru "bu C# içinde amaçlanan davranış" hakkında daha fazla bilgi var. – user1666620

+0

@ blas3nik'in cevabı nedenini açıklıyor; de MSDN "kaçış Braces" görmesini "[Bileşik biçimlendirme] (https://msdn.microsoft.com/en-us/library/txafckwd (v = vs.110) .aspx)" bu açıklandığı açıkça edilmiştir; özellikle "* iç içe geçmiş parantezlerin yorumlanması desteklenmiyor *". – gerryLowry

cevap

6

C# nasıl küme parantezleri işler, iyi bilinen. See here

Sen (örneğin, farklı yolları vardır) şöyle kaçabilir:

var str = string.Format("{0}{1:F6}{2}", "{", 3.14, "}"); 
Console.WriteLine(str); 
+0

bağlantı için teşekkürler - ben bununla karşılaşırsanız hatırlamak için bir şey. Yapabilseydim iki kere alırım. – user1666620

+0

Cevabınız doğru (+1), ancak buna kesinlikle Microsoft'un asla düzeltmediği bir hata derim. – xxbbcc

+0

@xxbbcc bu bir hata değil. 'F6}}' değişken formatı olarak alınır. btw bunu açgözlü yapmazlarsa iyi olurdu;) –

1

bu deneyin:

String.Format("{0}{1:F6}{2}", "{",3.14, "}")