C# में घुंघराले कोष्ठकों का रहस्य: String.Format में सही तरीके से एस्केप कैसे करें

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

C# में घुंघराले कोष्ठक सिरदर्द क्यों हैं?

\n\n

क्या आपने कभी C# में कोड लिखा है, {नाम}: {मान} जैसा टेक्स्ट आउटपुट करना चाहा है, और इसके बजाय FormatException मिला है? यदि हाँ — तो आप अकेले नहीं हैं। Stack Overflow पर प्रश्न «How to escape curly brace in String.Format» ने दसियों हज़ार बार देखा गया है। और यह कोई संयोग नहीं है: C# में घुंघराले कोष्ठक {} का विशेष अर्थ है — वे वेरिएबल्स के प्रतिस्थापन के लिए स्थान दर्शाते हैं।

\n\n

लेकिन क्या करें यदि आपको कोष्ठकों को सामान्य वर्णों के रूप में आउटपुट करने की आवश्यकता है? उदाहरण के लिए, JSON, टेम्पलेट्स, कोड जनरेशन, या बस एक सुंदर रिपोर्ट फ़ॉर्मेटिंग के लिए? आज हम इस विषय को शुरू से अंत तक समझेंगे: सरल एस्केपिंग से लेकर StringBuilder और स्ट्रिंग इंटरपोलेशन के साथ उन्नत ट्रिक्स तक।

\n\n

घुंघराले कोष्ठकों को कैसे एस्केप करें: मूल नियम

\n\n

उत्तर सरल और सुरुचिपूर्ण है: कोष्ठक को दोगुना करें। यदि आप एक खुला कोष्ठक { आउटपुट करना चाहते हैं, तो {{ लिखें। बंद कोष्ठक } के लिए — }} लिखें। C# समझ जाएगा कि यह प्लेसहोल्डर नहीं, बल्कि एक सामान्य वर्ण है।

\n\n

यहाँ सबसे सरल उदाहरण है:

\n\n
string result = string.Format("घुंघराले कोष्ठकों में मान: {{0}}", 42);\nConsole.WriteLine(result);\n// आउटपुट: घुंघराले कोष्ठकों में मान: {0}
\n\n

ध्यान दें: {{0}} — यह प्लेसहोल्डर नहीं है, बल्कि कोष्ठकों की एक एस्केप की गई जोड़ी है, जिसके अंदर अंक 0 है। यदि हम {0} लिखते, तो हमें वेरिएबल का मान (संख्या 42) मिलता।

\n\n

शुरुआती की सामान्य गलती

\n\n

अक्सर शुरुआती ऐसे लिखते हैं:

\n\n
// गलती!\nstring bad = string.Format("नमस्ते, {name}!", name);\n// FormatException: Input string was not in a correct format.
\n\n

क्यों? क्योंकि C# कोष्ठकों के अंदर एक संख्यात्मक इंडेक्स की अपेक्षा करता है ({0}, {1}), न कि वेरिएबल का नाम। नामों के लिए स्ट्रिंग इंटरपोलेशन (नीचे देखें) या स्पष्ट रूप से इंडेक्स निर्दिष्ट करने का उपयोग करें।

\n\n

व्यावहारिक उदाहरण: सरल से जटिल तक

\n\n

आइए कुछ वास्तविक परिदृश्यों को समझें जहाँ कोष्ठकों को एस्केप करना आवश्यक है।

\n\n

1. डीबगिंग उद्देश्यों के लिए JSON या XML आउटपुट

\n\n

मान लीजिए, आप एक लॉगर लिख रहे हैं और मान प्रतिस्थापन के साथ JSON स्ट्रिंग आउटपुट करना चाहते हैं:

\n\n
int userId = 101;\nstring json = string.Format("{{\\"userId\\": {0}, \\"name\\": \\"Alice\\"}}", userId);\nConsole.WriteLine(json);\n// आउटपुट: {"userId": 101, "name": "Alice"}
\n\n

यहाँ {{ और }} JSON के बाहरी घुंघराले कोष्ठक बनाते हैं, और {0} संख्या प्रतिस्थापित करता है।

\n\n

2. कोड टेम्पलेट्स का जनरेशन

\n\n

मान लीजिए, आप C# में कोड जनरेटर लिख रहे हैं। किसी अन्य भाषा (जैसे Python या JavaScript) के लिए टेम्पलेट के साथ एक स्ट्रिंग बनाने की आवश्यकता है:

\n\n
string template = string.Format("def {0}():\\n    return {{0}}", "calculate");\nConsole.WriteLine(template);\n// आउटपुट:\n// def calculate():\n//     return {0}
\n\n

ध्यान दें: आउटपुट स्ट्रिंग में {{0}} अब C# का प्लेसहोल्डर नहीं है, बल्कि जनरेट किए गए कोड का हिस्सा है (उदाहरण के लिए, Python के लिए)।

\n\n

3. एकाधिक प्लेसहोल्डर्स और कोष्ठकों के साथ फ़ॉर्मेटिंग

\n\n

जब प्रतिस्थापन और एस्केपिंग को मिलाना हो, तो मुख्य बात इंडेक्स में भ्रमित न होना है:

\n\n
string name = "Bob";\nint age = 30;\nstring message = string.Format("उपयोगकर्ता {{ {0} }} (आयु: {1})", name, age);\nConsole.WriteLine(message);\n// आउटपुट: उपयोगकर्ता { Bob } (आयु: 30)
\n\n

यहाँ {{ देता है {, }} देता है }, और {0} और {1} मान प्रतिस्थापित करते हैं।

\n\n

String.Format के विकल्प: स्ट्रिंग इंटरपोलेशन और StringBuilder

\n\n

हालाँकि string.Format क्लासिक है, आधुनिक C# में अधिक सुविधाजनक तरीके हैं। आइए तुलना करें।

\n\n

स्ट्रिंग इंटरपोलेशन (C# 6+)

\n\n

इंटरपोलेशन स्ट्रिंग से पहले $ का जादू है। यह पढ़ने में बेहतर है, लेकिन कोष्ठकों का एस्केपिंग बना रहता है

ब्लॉग

पुस्तक अनुशंसाएँ