मेरे पास Resharper का एक परीक्षण संस्करण है और यह हमेशा सुझाव देता है कि मैं नियमित स्ट्रिंग्स को शब्दशः स्ट्रिंग्स पर स्विच करता हूं। अंतर क्या है?
मेरे पास Resharper का एक परीक्षण संस्करण है और यह हमेशा सुझाव देता है कि मैं नियमित स्ट्रिंग्स को शब्दशः स्ट्रिंग्स पर स्विच करता हूं। अंतर क्या है?
जवाबों:
एक शब्दशः स्ट्रिंग वह है जिसे फ़ाइल नाम की तरह भाग निकलने की आवश्यकता नहीं है:
string myFileName = "C:\\myfolder\\myfile.txt";
होने वाला
string myFileName = @"C:\myfolder\myfile.txt";
@ प्रतीक का अर्थ है उस स्ट्रिंग को शाब्दिक रूप से पढ़ना, और अन्यथा नियंत्रण वर्णों की व्याख्या न करना।
यह C # विनिर्देश के भाग 2.4.4.5 में शामिल है :
२.४.४.५ शृंगार शास्त्रा
C # स्ट्रिंग शाब्दिक के दो रूपों का समर्थन करता है: नियमित रूप से स्ट्रिंग शाब्दिक और शब्दशः स्ट्रिंग शाब्दिक।
"हेलो" के रूप में एक नियमित स्ट्रिंग शाब्दिक में दोहरे उद्धरणों में संलग्न शून्य या अधिक वर्ण होते हैं, और इसमें दोनों सरल एस्केप सीक्वेंस (जैसे कि टैब कैरेक्टर के लिए \ t) और हेक्साडेसिमल और यूनिकोड एस्केप सीक्वेंस शामिल हो सकते हैं।
एक शब्दशः स्ट्रिंग शाब्दिक में एक @ वर्ण होता है, जिसके बाद एक दोहरे उद्धरण वर्ण, शून्य या अधिक वर्ण होते हैं, और एक बंद दोहरे वर्ण होता है। एक सरल उदाहरण @ "हैलो" है। एक शब्दशः स्ट्रिंग शाब्दिक में, सीमांकक के बीच के वर्णों की व्याख्या शब्दशः की जाती है, एकमात्र अपवाद एक उद्धरण-एस्केप-अनुक्रम है। विशेष रूप से, सरल एस्केप सीक्वेंस और हेक्साडेसिमल और यूनिकोड एस्केप सीक्वेंस को वर्बटीम स्ट्रिंग लिटरल में संसाधित नहीं किया जाता है। एक वर्बटीम स्ट्रिंग शाब्दिक कई लाइनों को फैला सकता है।
दूसरे शब्दों में एक @ "शब्दशः स्ट्रिंग शाब्दिक" में एकमात्र विशेष चरित्र दोहरे-भाव वाला चरित्र है। यदि आप एक वर्बटिम स्ट्रिंग लिखने की इच्छा रखते हैं जिसमें एक डबल-कोट है तो आपको दो डबल-कोट्स लिखना होगा। अन्य सभी पात्रों की शाब्दिक व्याख्या की जाती है।
तुम भी एक शब्दशः स्ट्रिंग शाब्दिक में शाब्दिक नई लाइनें हो सकती है। एक नियमित स्ट्रिंग शाब्दिक में आपके पास शाब्दिक नई लाइनें नहीं हो सकती हैं। इसके बजाय आपको उदाहरण के लिए उपयोग करना चाहिए "\n"
।
शब्दशः स्ट्रिंग्स शाब्दिक अक्सर स्रोत कोड में फ़ाइल नाम और नियमित अभिव्यक्तियों को एम्बेड करने के लिए उपयोगी होते हैं, क्योंकि इस प्रकार के तारों में बैकस्लैम आम हैं और अगर एक नियमित स्ट्रिंग शाब्दिक का उपयोग किया जाता है, तो बचना होगा।
नियमित स्ट्रिंग शाब्दिक से बनाए गए तार और एक क्रियात्मक शाब्दिक शब्द से निर्मित तार के बीच कोई अंतर नहीं है - वे दोनों प्रकार के हैं System.String
।
एक स्ट्रिंग और वर्बेटिम स्ट्रिंग के बीच कोई रनटाइम अंतर नहीं है। वे केवल संकलन समय पर अलग हैं। कंपाइलर एक शब्दशः स्ट्रिंग में कम भागने के क्रम को स्वीकार करता है, तो आप क्या-क्या-क्या-क्या-आप-एक बोली भागने के अलावा अन्य प्राप्त करते हैं।
आप एक नाम के रूप में एक कीवर्ड का इलाज करने के लिए संकलक को बताने के लिए, वर्बेटिम वर्ण, @ का उपयोग कर सकते हैं:
var @if = "if";
//okay, treated as a name
Console.WriteLine(@if);
//compiler err, if without @ is a keyword
Console.WriteLine(if);
var @a = "a";
//okay
Console.WriteLine(@a);
//also okay, @ isn't part of the name
Console.WriteLine(a);
वर्बेटिम स्ट्रिंग्स का उपयोग करके आप मल्टीलाइन स्ट्रिंग भी कर सकते हैं:
Console.WriteLine(@"This
is
a
Test
for stackoverflow");
आपके बिना @
एक त्रुटि हुई।
VB14 में एक नया फीचर है Multiline Strings
, यह C # में वर्बेटिम स्ट्रिंग्स की तरह है।
प्रो टिप: वीबी स्ट्रिंग शाब्दिक अब सी # वर्बटीम स्ट्रिंग्स की तरह हैं।
नियमित तार विशेष वर्णों में अनुवाद करने के लिए विशेष एस्केप दृश्यों का उपयोग करते हैं।
/*
This string contains a newline
and a tab and an escaped backslash\
*/
Console.WriteLine("This string contains a newline\nand a tab\tand an escaped backslash\\");
Verbatim स्ट्रिंग्स की व्याख्या किसी भी एस्केप सीक्वेंस के अनुवाद के बिना की जाती है:
/*
This string displays as is. No newlines\n, tabs\t or backslash-escapes\\.
*/
Console.WriteLine(@"This string displays as is. No newlines\n, tabs\t or backslash-escapes\\.");