दिलचस्प पोस्ट
एएसपी.नेट एमवीसी – एक्टिव डायरेक्ट्री के विरुद्ध उपयोगकर्ता को प्रमाणित करता है, लेकिन यूजरनेम और पासवर्ड को इनपुट के लिए आवश्यक है एक लिंक को एक लिंक में बनाएं XAML पृष्ठों के बीच मान (पैरामीटर) कैसे पारित करें? सी # में क्यों मैं सार स्थिर तरीकों नहीं कर सकता? सख्त मानदंड: संदर्भ से केवल चर को पारित किया जाना चाहिए Jquery / Javascript का उपयोग करके, मेरे वेब पेज में से किसी एक से सभी छवियों को कैसे लोड करें I क्यों प्रतिशत ऊंचाई मेरे div पर काम नहीं कर रही है? क्यों मैं <bits / stdc ++। H> शामिल नहीं होना चाहिए? छवि को केंद्र में और डिवेल के अंदर मध्य में संरेखित करें ल्यूसीन टोकन स्ट्रीम से टोकन कैसे प्राप्त करें? त्रुटि: मुख्य वर्ग को ढूंढ या लोड नहीं किया जा सका एंड्रॉइड में मैं एक कार्यशील ऊर्ध्वाधर सीकबार कैसे प्राप्त कर सकता हूं? मैं कैसे परीक्षण कर सकता हूँ अगर स्ट्रिंग में कोई अक्षर जावास्क्रिप्ट का उपयोग कर अपरकेस या लोअरकेस है? Intellij आईडीईए फोर्ज सेटअप त्रुटि प्रत्येक आईडी के लिए अधिकतम मूल्य प्राप्त करने के लिए साधारण क्वेरी

सी # में स्ट्रिंग के सामने @ क्या है?

यह सी # (या संभवत: वीबीनेट) के लिए एक। NET प्रश्न है, लेकिन मैं निम्नलिखित घोषणाओं के बीच अंतर का पता लगाने की कोशिश कर रहा हूं:

string hello = "hello"; 

बनाम

 string hello_alias = @"hello"; 

कंसोल पर मुद्रण करना कोई फर्क नहीं पड़ता, लंबाई गुण समान हैं

वेब के समाधान से एकत्रित समाधान "सी # में स्ट्रिंग के सामने @ क्या है?"

यह स्ट्रिंग को एक शब्दशः स्ट्रिंग के रूप में चिह्नित करता है – स्ट्रिंग में कुछ भी जो आमतौर पर एक एस्केप अनुक्रम के रूप में व्याख्या की जाती है को नजरअंदाज किया जाता है।

तो "C:\\Users\\Rich" @"C:\Users\Rich"

एक अपवाद है: डबल उद्धरण के लिए एस्केप अनुक्रम की आवश्यकता है। एक डबल उद्धरण से बचने के लिए, आपको एक पंक्ति में दो दोहरे उद्धरण चिह्न लगाए जाने की आवश्यकता है। उदाहरण के लिए, @"""" लिए मूल्यांकन "

यह शब्दशः शब्दशः शब्दशः है इसका मतलब है कि बचने का उपयोग नहीं किया गया है। उदाहरण के लिए:

 string verbatim = @"foo\bar"; string regular = "foo\\bar"; 

यहाँ verbatim और regular से एक ही सामग्री है।

यह बहु-लाइन सामग्रियों को भी अनुमति देता है – जो एसक्यूएल के लिए बहुत आसान हो सकता है:

 string select = @" SELECT Foo FROM Bar WHERE Name='Baz'"; 

बचने का एक बिट जो शब्दशः स्ट्रिंग लीटरल्स के लिए आवश्यक है, उसे दोहरे कोट (") प्राप्त करना है जिसे आप दोहरीकरण करते हैं:

 string verbatim = @"He said, ""Would you like some coffee?"" and left."; string regular = "He said, \"Would you like some coffee?\" and left."; 

एक '@' का एक अन्य अर्थ भी है: इसे एक वैरिएबल घोषणा के सामने रखकर आप आरक्षित खोजशब्दों को चर नामों के रूप में इस्तेमाल कर सकते हैं।

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

 string @class = "something"; int @object = 1; 

मैं इसके लिए केवल एक या दो वैध उपयोग पाया है। मुख्य रूप से ASP.NET MVC में जब आप ऐसा कुछ करना चाहते हैं:

 <%= Html.ActionLink("Text", "Action", "Controller", null, new { @class = "some_css_class" })%> 

जो एक HTML लिंक का निर्माण करेगा जैसे:

 <a href="/Controller/Action" class="some_css_class">Text</a> 

अन्यथा आपको 'क्लास' का उपयोग करना होगा, जो आरक्षित शब्द नहीं है, लेकिन अपरकेस 'सी' HTML मानकों का पालन नहीं करता है और सिर्फ सही नहीं दिखता है।

चूंकि आपने स्पष्ट रूप से वीबी के लिए भी कहा है, मुझे यह बताएं कि यह शब्दशः स्ट्रिंग सिंटैक्स VB में मौजूद नहीं है, केवल सी # में। इसके बजाए, वीबी में सभी स्ट्रिंग्स शब्दशः हैं (सिवाय इसके कि वे सी # वर्बिटिम स्ट्रिंग के विपरीत, लाइन ब्रेक को शामिल नहीं कर सकते हैं):

 Dim path = "C:\My\Path" Dim message = "She said, ""Hello, beautiful world.""" 

एबीसी अनुक्रम वीबी में मौजूद नहीं है (कोटा वर्ण की दोहरीकरण को छोड़कर, जैसे सी # वर्बैटीम स्ट्रिंग्स) जो कि कुछ चीजों को और अधिक जटिल बना देता है उदाहरण के लिए, VB में निम्नलिखित कोड लिखने के लिए आपको कॉन्टैटेनेशन (या किसी स्ट्रिंग के निर्माण के अन्य तरीकों से) का उपयोग करने की आवश्यकता है

 string x = "Foo\nbar"; 

VB में इस प्रकार लिखा जाएगा:

 Dim x = "Foo" & Environment.NewLine & "bar" 

( & वीबी स्ट्रिंग कंसकेटेशन ऑपरेटर है। + समान रूप से इस्तेमाल किया जा सकता है।)

http://msdn.microsoft.com/en-us/library/aa691090.aspx

सी # स्ट्रिंग लीटरल्स के दो रूपों का समर्थन करता है: नियमित स्ट्रिंग लीटरल और वर्बैटिम स्ट्रिंग लीटरल।

नियमित रूप से एक स्ट्रिंग शाब्दिक शून्य या अधिक वर्णों को दोहरे उद्धरण में संलग्न करता है, जैसे "हैलो", और इसमें सामान्य एस्केप अनुक्रम (जैसे कि टैब वर्ण के लिए \ t) और हेक्साडेसिमल और यूनिकोड एस्केप अनुक्रम दोनों शामिल हो सकते हैं।

एक शब्दशः स्ट्रिंग शब्दशः एक @ चरित्र के बाद एक डबल कोट चरित्र, शून्य या अधिक वर्ण, और एक समापन डबल-उद्धरण चरित्र के होते हैं। एक सरल उदाहरण है @ "हैलो" शब्दशः स्ट्रिंग में, सीमांकक के बीच के अक्षर शब्दशः व्याख्या किए जाते हैं, केवल उद्धरण-बच-क्रम से एकमात्र अपवाद होता है विशेष रूप से, सरल एस्केप अनुक्रम और हेक्साडेसिमल और यूनिकोड एस्केप अनुक्रम शब्दशः स्ट्रिंग लीटरल्स में संसाधित नहीं किए जाते हैं। एक शब्दशः स्ट्रिंग शब्दशः कई पंक्तियों को स्पैन कर सकता है

MSDN से प्रतिलिपि बनाई गई:

समय संकलित करने पर, शब्दावली स्ट्रिंग को सभी समान एस्केप अनुक्रमों के साथ सामान्य स्ट्रिंग में बदल दिया जाता है। इसलिए, यदि आप डिबगर वॉच विंडो में एक शब्दशः स्ट्रिंग देखते हैं, तो आप एस्केप वर्ण देखेंगे जो कंपाइलर द्वारा जोड़े गए थे, आपके स्रोत कोड से शब्दशः संस्करण नहीं। उदाहरण के लिए, शब्दशः स्ट्रिंग @"C:\files.txt" घड़ी विंडो में "C:\\files.txt" रूप में दिखाई देगा।

यह एक शब्दशः स्ट्रिंग है, और बचने के नियमों को बदलता है – अब जो एकमात्र पात्र बच गया है वह "" से बच गया ""। यह विशेष रूप से फ़ाइल पथ और regex के लिए उपयोगी है:

 var path = @"c:\some\location"; var tsql = @"SELECT * FROM FOO WHERE Bar = 1"; var escaped = @"a "" b"; 

आदि

स्ट्रिंग के सामने एक @ डालकर आपको विशेष वर्ण जैसे कि विशेष कोड या एस्केप वर्णों का उपयोग किए बिना बैकस्लैश या डबल-उद्धरणों का उपयोग करने में सक्षम हो जाता है

तो आप लिख सकते हैं:

 string path = @"C:\My path\"; 

के बजाय:

 string path = "C:\\My path\\"; 

स्पष्टीकरण सरल है "string\" स्ट्रिंग "string\" प्रतिनिधित्व करने के लिए, कंपाइलर को "string\\" आवश्यकता है क्योंकि \ escape अक्षर है यदि आप इसके बजाय @"string\" करते हैं, तो आप \\ बारे में भूल सकते हैं।

किसी भी स्ट्रिंग के "@" अनफ्रंट डाल करने के लिए यह स्ट्रिंग को शाब्दिक बना देता है एक बेहतर उदाहरण होगा

 string String1 = "Hello""; 

तथा

 string String2 = @"Hello""; 

पहले वाला एक वाक्यविन्यास त्रुटि होने वाला है, जहां दूसरे के रूप में हैलो "प्रिंट किया जाएगा।