.NET में एक प्रारूप स्ट्रिंग में ब्रेसिज़ (घुंघराले ब्रैकेट) से कैसे बचें


988

उपयोग करने में कोष्ठक कैसे बच सकते हैं string.Format

उदाहरण के लिए:

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

यह उदाहरण एक अपवाद नहीं फेंकता है, लेकिन स्ट्रिंग को आउटपुट करता है foo {0}

क्या कोष्ठक से बचने का एक तरीका है?


1
MSDN स्ट्रिंग प्रारूपण FAQ FAQ msdn.microsoft.com/en-us/netframework/aa569608 : मैं स्ट्रिंग प्रारूपों में एक घुंघराले ब्रैकेट कैसे लिखूं ? क्या बची हुई घुंघराले कोष्ठक में कोई अजीब व्यवहार है जिसकी मुझे जानकारी होनी चाहिए? मैं "{42.00}" जैसा कुछ लिखने के लिए स्ट्रिंग प्रारूपण का उपयोग कैसे कर सकता हूं?
gerryLowry

1
दुर्भाग्य से, उपरोक्त MSDN लिंक टूट गया है। वर्तमान में, सही लिंक msdn.microsoft.com/en-us/library/… (नीचे के क्यूए सेक्शन को सील करता है, या पृष्ठ पर "भागने" के लिए खोज करता है) लगता है।
पालो मृग

जवाबों:


1283

उत्पादन के लिए आपको foo {1, 2, 3}कुछ करना होगा:

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

आउटपुट का {उपयोग {{करने के लिए और आप उपयोग करने के लिए आउटपुट के }लिए }}

या अब, आप इस तरह से सी # स्ट्रिंग प्रक्षेप का उपयोग कर सकते हैं (C # 6.0 में उपलब्ध सुविधा)

ब्रैकेट बचना: स्ट्रिंग इंटरपोलेशन $ ("") । यह C # 6.0 में नई सुविधा है

var inVal = "1, 2, 3";
var outVal = $" foo {{{inVal}}}";
//Output will be:  foo {1, 2, 3}

108
{{{"प्रारूप स्ट्रिंग में बची हुई ब्रैकेट पात्र के रूप में माना जाता है।
icelava

5
लेकिन अगर आप अपने स्ट्रिंग स्पेसर में मूल्य स्वरूपण जोड़ना चाहते हैं तो आपको नीचे दिए गए गुरु कारा के उत्तर को भी पढ़ना होगा।
निक

आधिकारिक दस्तावेज़ीकरण समग्र स्वरूपण में ब्रेसेस से बचने वाला अनुभाग पढ़ें ।
जेपी स्टिग नीलसन

8
यह नए C # 6 स्ट्रिंग इंटरपोलेशन ( $"a = {{ {a} }}") में भी काम कर रहा है
महमूदवक्स

C # 6 स्ट्रिंग प्रक्षेप पथ पर अधिक विशिष्ट, घुंघराले कार्यों पर दोहरीकरण जैसे string v = $" foo {{{t}}}";। यदि आपके पास बचने के लिए अन्य पात्र हैं, तो वह कर्ली नहीं है आप $ @ कॉम्बो का उपयोग कर सकते हैंstring v2 = $@"\foo {{{t}}}\";
Nhan

209

हां आउटपुट {में string.Formatआपको इस तरह से बचना होगा{{

तो यह

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

उत्पादन होगा "foo {1,2,3}"

लेकिन आपको C # में एक डिज़ाइन बग के बारे में जानना होगा, जो यह है कि उपरोक्त तर्क पर जाकर आप मान लेंगे कि यह कोड {24.00} प्रिंट होगा

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

लेकिन यह प्रिंट {एन}। ऐसा इसलिए है क्योंकि सी # पार्स सीक्वेंस और फॉर्मेट कैरेक्टर्स से बच जाता है। उपरोक्त मामले में वांछित मूल्य प्राप्त करने के लिए आपको इसके बजाय इसका उपयोग करना होगा।

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

संदर्भ लेख String.Format gottach और स्ट्रिंग स्वरूपण अक्सर पूछे जाने वाले प्रश्न


12
अगर मैं उस बग में भाग गया, तो मैं लिखूंगा string.Format( "{{{0}}}", i.ToString("N") );जो कुछ के लिए अधिक पठनीय हो सकता है।
हैप्पी नोमाड

1
@ हेप्पी यह हो सकता है, लेकिन फिर आप स्वयं को दो बार FormatProvider निर्दिष्ट करने के जोखिम के साथ पाएंगे कि आप अलग-अलग लोगों को निर्दिष्ट करेंगे, या एक को मिस करेंगे।
क्लिक करें

74

लगभग वहाँ पहुँच गया! एक ब्रेस के लिए एस्केप अनुक्रम है {{या }}तो अपने उदाहरण के लिए आप का प्रयोग करेंगे:

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

22

आप डबल ओपन ब्रैकेट और डबल क्लोजिंग ब्रैकेट का उपयोग कर सकते हैं जो केवल आपके पेज पर एक ब्रैकेट दिखाएगा।


13

घुंघराले कोष्ठक से बचना और स्ट्रिंग प्रक्षेप का उपयोग करना एक दिलचस्प चुनौती है। स्ट्रिंग प्रक्षेप और पार्सिंग से बचने के लिए आपको चौगुनी कोष्ठक का उपयोग करने की आवश्यकता है ।string.format

ब्रैकेट से बचना: स्ट्रिंग इंटरपोलेशन $ ("") और स्ट्रिंग.फॉर्मैट

string localVar = "dynamic";
string templateString = $@"<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>

8

C # में json strings ad-hoc (बिना किसी class / object के serializing) के निर्माण की खोज में यहाँ आया था। दूसरे शब्दों में, C # और " वर्बेटिम स्ट्रिंग लिटरल्स " में इंटरपोलेटेड स्ट्रिंग्स का उपयोग करते हुए ब्रेसिज़ और उद्धरण से कैसे बच सकते हैं (जैसे '@' उपसर्ग के साथ डबल उद्धृत स्ट्रिंग्स) ...

var json = $@"{{""name"":""{name}""}}";

5
[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);
}

2

या आप इस तरह सी # स्ट्रिंग प्रक्षेप का उपयोग कर सकते हैं (C # 6.0 में उपलब्ध सुविधा)

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

1

बचने वाली ब्रैकेट: स्ट्रिंग इंटरपोलेशन $ (""):

अब, आप इस तरह सी # स्ट्रिंग प्रक्षेप का उपयोग कर सकते हैं (C # 6.0 में उपलब्ध सुविधा)

var inVal= "1, 2, 3";
var outVal= $" foo {{{inVal}}}";
//Output will be:  foo {1, 2, 3}

0

मेरा लक्षय:

मुझे "{CR}{LF}"एक stringवैरिएबल को मान असाइन करने की आवश्यकता है delimiter

कोड c #:

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

नोट: विशेष वर्णों से बचने के लिए आम तौर पर आपको उपयोग करना होगा। घुंघराले ब्रैकेट खोलने के लिए {{} जैसे एक अतिरिक्त का उपयोग करें। घुंघराले ब्रैकेट को बंद करने के लिए}, एक अतिरिक्त}} का उपयोग करें।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.