C# में मल्टीलाइन स्ट्रिंग्स: हैक्स से C# 11 तक — पूर्ण गाइड

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

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

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

एक बार Stack Overflow पर: C# में लंबी स्ट्रिंग्स का अभिशाप

\n\n

एक स्थिति की कल्पना करें। आप C# में कोड के अंदर ही एक कॉन्फ़िगरेशन JSON, SQL क्वेरी, या मान लीजिए, एक HTML टेम्पलेट लिख रहे हैं। स्ट्रिंग लंबी, बदसूरत और पूरी तरह से अपठनीय हो जाती है। आप टेक्स्ट को अगली पंक्ति में ले जाने के लिए Enter दबाते हैं... और आपको कंपाइलेशन एरर मिलती है। परिचित लगता है?

\n\n

Stack Overflow पर प्रश्न "C# में मल्टीलाइन स्ट्रिंग लिटरल" ने हजारों बार देखा गया है। और यह कोई संयोग नहीं है। लंबे समय तक, C# मल्टीलाइन टेक्स्ट के साथ काम करने के लिए सबसे अनुकूल भाषा नहीं थी। लेकिन समय बदल रहा है। इस लेख में, हम C# 11 में आए सुरुचिपूर्ण समाधानों तक का सफर तय करेंगे।

\n\n

यदि आप C# में लिखते हैं और मल्टीलाइन स्ट्रिंग लिटरल के साथ काम करते हैं, तो यह सामग्री आपके घंटों की गूगलिंग बचाएगी। चलिए शुरू करते हैं!

\n\n

समस्या: केवल Enter दबाना एक बुरा विचार क्यों है?

\n\n

C# (C++ की तरह) में, एक स्ट्रिंग लिटरल कोट्स में बंद वर्णों का एक क्रम है। ऐसे कोट्स के अंदर लाइन ब्रेक एक सिंटैक्स एरर है। कंपाइलर यह नहीं समझ पाएगा कि स्ट्रिंग कहाँ समाप्त होती है।

\n\n

यहाँ बताया गया है कि कैसे नहीं करना चाहिए:

\n\n
// कंपाइलेशन एरर!\nstring query = "SELECT * FROM Users\nWHERE Age > 18\nORDER BY Name";
\n\n

कंपाइलर "SELECT * FROM Users देखेगा — और बस। आगे अंधकार है। पहले, डेवलपर्स जैसे भी संभव होता था, वैसे ही काम चलाते थे। आइए समाधानों के विकास को समझते हैं।

\n\n

पुराना तरीका: Verbatim string (@-स्ट्रिंग) — जीवन रक्षक

\n\n

सबसे पहला विचार जो दिमाग में आता है वह है verbatim string literal। आप बस शुरुआती कोट से पहले @ लगा देते हैं। यह एस्केप सीक्वेंस की व्याख्या को बंद कर देता है (डबल कोट्स "" को छोड़कर)।

\n\n

लेकिन एक बारीकी है: इंडेंटेशन भी स्ट्रिंग का हिस्सा बन जाता है।

\n\n

Verbatim string के साथ उदाहरण:

\n\n
string json = @"{\n    ""name"": ""Alice"",\n    ""age"": 30\n}";\nConsole.WriteLine(json);
\n\n

आउटपुट:

\n
{\n    "name": "Alice",\n    "age": 30\n}
\n\n

लाभ:

\n
    \n
  • C# के सभी संस्करणों में काम करता है।
  • \n
  • बैकस्लैश (\\) को एस्केप करने की आवश्यकता नहीं है।
  • \n
\n

नुकसान:

\n
    \n
  • अंदर के कोट्स को दोगुना करना पड़ता है ("") — यदि बहुत सारा JSON है तो यह भयानक है।
  • \n
  • बाईं ओर के इंडेंट (स्पेस/टैब) अंतिम स्ट्रिंग में शामिल हो जाते हैं।
  • \n
  • सीधे स्ट्रिंग इंटरपोलेशन ($) के साथ मिश्रित नहीं किया जा सकता (लेकिन $@ संभव है)।
  • \n
\n\n

यह विधि अभी भी लोकप्रिय है, लेकिन स्वच्छ कोड के लिए यह आदर्श नहीं है। असली सफलता C# 11 में हुई।

\n\n

नवीनतम तरीका: Raw string literal (C# 11 और .NET 7+)

\n\n

C# 11 से शुरू करते हुए, हमारे पास raw string literal है — शाब्दिक रूप से "कच्चा स्ट्रिंग लिटरल"। यह मल्टीलाइन की 99% समस्याओं को हल करता है।

\n\n

सिंटैक्स: लगातार तीन या अधिक डबल कोट्स (""")।

\n\n

उदाहरण 1: बिना एस्केपिंग के सरल JSON

\n\n
string json = """\n    {\n        "name": "Alice",\n        "age": 30\n    }\n    """;\nConsole.WriteLine(json);
\n\n

आउटपुट:

\n
{\n    "name": "Alice",\n    "age": 30\n}
\n\n

जादू: स्ट्रिंग के अंदर कोट्स को दोगुना करने की आवश्यकता नहीं है! कंपाइलर समझता है कि स्ट्रिंग तभी समाप्त हुई है जब वह लगातार तीन कोट्स देखता है।

\n\n

उदाहरण 2: इंडेंट के साथ SQL क्वेरी

\n\n
string query = """\n    SELECT \n        u.Name,\n        o.OrderDate\n    FROM Users u\n    JOIN Orders o ON u.Id = o.UserId\n    WHERE o.Status = 'Active'\n    ORDER BY o.OrderDate DESC\n    """;\nConsole.WriteLine(query);
\n\n

इंडेंट के बारे में महत्वपूर्ण: समापन कोट्स (""") इंडेंट का आधार स्तर निर्धारित करते हैं। वे सभी पंक्तियाँ जिनमें समापन कोट्स से कम इंडेंट है, काट दी जाएंगी। यह कोड की पठनीयता बनाए रखने की अनुमति देता है, बिना स्ट्रिंग को अनावश्यक स्पेस से अव्यवस्थित किए।

ब्लॉग

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