C # में, मैं एक स्ट्रिंग मान को एक रिक्त स्ट्रिंग के साथ प्रारंभ करना चाहता हूं।
मुझे यह कैसे करना चाहिए? सही तरीका क्या है, और क्यों?
string willi = string.Empty;
या
string willi = String.Empty;
या
string willi = "";
और क्या?
C # में, मैं एक स्ट्रिंग मान को एक रिक्त स्ट्रिंग के साथ प्रारंभ करना चाहता हूं।
मुझे यह कैसे करना चाहिए? सही तरीका क्या है, और क्यों?
string willi = string.Empty;
या
string willi = String.Empty;
या
string willi = "";
और क्या?
जवाबों:
जो कुछ भी आप और आपकी टीम सबसे अधिक पठनीय पाते हैं, उसका उपयोग करें।
अन्य उत्तरों ने सुझाव दिया है कि आपके द्वारा उपयोग किए जाने पर हर बार एक नया स्ट्रिंग बनाया जाता है ""
। यह सच नहीं है - स्ट्रिंग इंटर्निंग के कारण, इसे या तो एक बार प्रति विधानसभा या एक बार AppDomain (या संभवतः पूरी प्रक्रिया के लिए एक बार - उस मोर्चे पर निश्चित नहीं) के अनुसार बनाया जाएगा। यह अंतर नगण्य है - बड़े पैमाने पर, व्यापक रूप से महत्वहीन।
जो आपको अधिक पठनीय लगता है वह एक अलग मामला है। यह व्यक्तिपरक है और यह एक व्यक्ति से दूसरे व्यक्ति में अलग-अलग होगा - इसलिए मैं आपको सुझाव देता हूं कि आपकी टीम के अधिकांश लोगों को क्या पसंद है, और सभी उस निरंतरता के साथ चलते हैं। व्यक्तिगत रूप से मुझे ""
पढ़ना आसान लगता है।
तर्क है कि ""
और " "
आसानी से एक दूसरे के लिए गलत कर रहे हैं वास्तव में मेरे साथ नहीं धोता है। जब तक आप एक आनुपातिक फ़ॉन्ट का उपयोग नहीं कर रहे हैं (और मैंने ऐसा करने वाले किसी भी डेवलपर्स के साथ काम नहीं किया है) यह अंतर बताना बहुत आसान है।
string.Empty
लिए एक स्थिर नहीं है । इसका मतलब है कि कई मामलों में जहां संकलन-समय की आवश्यकता होती है, string.Empty
कानूनी भी नहीं है। इसमें स्टेटमेंट में case ""
ब्लॉक switch
, वैकल्पिक मापदंडों के डिफ़ॉल्ट मान , विशेषताओं को लागू करने में पैरामीटर और गुण , और बहुत सारी अन्य परिस्थितियां (पाठक को छोड़ दी गई हैं) शामिल हैं। इसलिए यह देखते हुए कि string.Empty
कुछ सामान्य स्थितियों में इसे बंद कर दिया जाता है, बेहतर है कि ""
-सहयोग सम्मेलन का उपयोग किया जाए।
वहाँ वास्तव में एक प्रदर्शन और कोड उत्पन्न दृष्टिकोण से कोई अंतर नहीं है। प्रदर्शन परीक्षण में, वे आगे और पीछे चले गए, जिसमें से एक दूसरे के मुकाबले तेज था, और केवल मिलीसेकंड से।
पर्दे के कोड के पीछे देखने में, आपको वास्तव में कोई अंतर नहीं दिखता है। एकमात्र अंतर IL में है, जो string.Empty
opcode ldsfld
का ""
उपयोग करते हैं और opcode का उपयोग करते हैं ldstr
, लेकिन यह केवल इसलिए string.Empty
है क्योंकि स्थैतिक है, और दोनों निर्देश समान कार्य करते हैं। यदि आप उत्पादित विधानसभा को देखते हैं, तो यह बिल्कुल वैसा ही है।
private void Test1()
{
string test1 = string.Empty;
string test11 = test1;
}
private void Test2()
{
string test2 = "";
string test22 = test2;
}
.method private hidebysig instance void
Test1() cil managed
{
// Code size 10 (0xa)
.maxstack 1
.locals init ([0] string test1,
[1] string test11)
IL_0000: nop
IL_0001: ldsfld string [mscorlib]System.String::Empty
IL_0006: stloc.0
IL_0007: ldloc.0
IL_0008: stloc.1
IL_0009: ret
} // end of method Form1::Test1
.method private hidebysig instance void
Test2() cil managed
{
// Code size 10 (0xa)
.maxstack 1
.locals init ([0] string test2,
[1] string test22)
IL_0000: nop
IL_0001: ldstr ""
IL_0006: stloc.0
IL_0007: ldloc.0
IL_0008: stloc.1
IL_0009: ret
} // end of method Form1::Test2
string test1 = string.Empty;
0000003a mov eax,dword ptr ds:[022A102Ch]
0000003f mov dword ptr [ebp-40h],eax
string test11 = test1;
00000042 mov eax,dword ptr [ebp-40h]
00000045 mov dword ptr [ebp-44h],eax
string test2 = "";
0000003a mov eax,dword ptr ds:[022A202Ch]
00000040 mov dword ptr [ebp-40h],eax
string test22 = test2;
00000043 mov eax,dword ptr [ebp-40h]
00000046 mov dword ptr [ebp-44h],eax
सबसे अच्छा कोड कोई कोड नहीं है :
कोडिंग की मौलिक प्रकृति यह है कि प्रोग्रामर के रूप में हमारा कार्य यह पहचानना है कि हम जो भी निर्णय लेते हैं वह एक व्यापार है। […] संक्षिप्तता के साथ शुरू करो। परीक्षण द्वारा आवश्यकतानुसार अन्य आयाम बढ़ाएं।
नतीजतन, कम कोड बेहतर कोड है: के लिए पसंद ""
करते हैं string.Empty
या String.Empty
। उन दो को छह बार बिना किसी अतिरिक्त लाभ के साथ - निश्चित रूप से कोई अतिरिक्त स्पष्टता नहीं है, क्योंकि वे ठीक उसी जानकारी को व्यक्त करते हैं।
i
है एक लंबे चर नाम की तुलना में बेहतर। इससे भी अधिक सामान्य, छोटे परिवर्तनशील नाम जो समान जानकारी को स्पष्ट करते हैं, हमेशा स्पष्ट होते हैं। यह सिर्फ इतना है कि आवश्यक जानकारी को व्यक्त करने के लिए आपको एक निश्चित चरित्र की लंबाई की आवश्यकता है, और मैं इससे इनकार नहीं कर रहा हूं (कोई भी नहीं है)।
एक अंतर यह है कि यदि आप एक switch-case
वाक्यविन्यास का उपयोग करते हैं, तो आप नहीं लिख सकते case string.Empty:
क्योंकि यह एक स्थिर नहीं है। आप एCompilation error : A constant value is expected
अधिक जानकारी के लिए इस लिंक को देखें: string-खाली-बनाम-खाली-उद्धरण
switch
बयान एक बहुत अच्छा उदाहरण है। इसके अलावा, यदि आप एक वैकल्पिक पैरामीटर बनाते हैं, जैसे void MyMethod(string optional = "") { ... }
, इसका उपयोग करना भी संभव नहीं है string.Empty
। और फिर बेशक यदि आप किसी const
क्षेत्र या स्थानीय चर को परिभाषित करना चाहते हैं , const string myString = "";
तो फिर ""
से एकमात्र विकल्प है। यदि केवल string.Empty
एक स्थिर क्षेत्र होता, तो कोई अंतर नहीं होता। लेकिन ऐसा नहीं है, इसलिए कुछ मामलों में आपको उपयोग करना होगा ""
। तो ""
हर समय उपयोग क्यों नहीं ?
string.Empty
से आपको अपने कोड आधार में स्थिरता प्राप्त करने से रोकता है : आपको एक ही चीज़ को व्यक्त करने के लिए दो अलग-अलग संस्थाओं का उपयोग करना चाहिए। और उन चीजों की सूची में शामिल करने के लिए जिन्हें आप नहीं कर सकते हैं: आप विशेषताओं केstring.Empty
साथ उपयोग नहीं कर सकते ।
मैं पसंद करते हैं string
करने के लिए String
। चुनने string.Empty
के ऊपर ""
एक को चुनने और इसके साथ चिपके हुए की बात है। उपयोग करने string.Empty
का लाभ यह स्पष्ट है कि आपका क्या मतलब है, और आप गलती से "\x003"
अपने जैसे गैर-मुद्रण योग्य वर्णों की नकल नहीं करते हैं ""
।
""
कॉपी / पेस्ट करने के दौरान खतरनाक है, वह शून्य है, मैं दावा करता हूं, क्योंकि आप खाली स्ट्रिंग को कभी भी कॉपी / पेस्ट नहीं करते हैं। अन्य स्ट्रिंग्स के लिए, यह निश्चित रूप से दिमाग में होना चाहिए।
मैं झंकार में नहीं जा रहा था, लेकिन मुझे कुछ गलत जानकारी यहाँ दिखाई दे रही है।
मैं, व्यक्तिगत रूप से, पसंद करता हूं string.Empty
। यह एक व्यक्तिगत प्राथमिकता है, और मैं केस-बाय-केस के आधार पर जो भी टीम के साथ काम करता हूं उसकी इच्छा पर झुकता हूं।
जैसा कि कुछ अन्य लोगों ने उल्लेख किया है, दोनों में कोई अंतर नहीं है string.Empty
और String.Empty
।
इसके अतिरिक्त, और यह एक छोटा ज्ञात तथ्य है, "" का उपयोग करना पूरी तरह से स्वीकार्य है। "" का हर उदाहरण, अन्य वातावरणों में, एक वस्तु का निर्माण करेगा। हालाँकि, .NET अपने स्ट्रिंग्स को इंटर्न करता है, इसलिए भविष्य के इंस्टेंस, इंटर्न पूल से उसी अपरिवर्तनीय स्ट्रिंग को खींच लेंगे, और कोई भी प्रदर्शन हिट नगण्य होगा। स्रोत: ब्राड अब्राम ।
मैं व्यक्तिगत रूप से "" पसंद करता हूं जब तक कि कुछ अधिक जटिल का एक अच्छा कारण नहीं है।
String.Empty
और string.Empty
बराबर हैं। String
बीसीएल वर्ग नाम है; string
इसका सी # उपनाम (या शॉर्टकट, यदि आप होगा) है। साथ ही Int32
और int
। अधिक उदाहरणों के लिए डॉक्स देखें ।
जहां तक ""
मेरा सवाल है, मुझे यकीन नहीं है।
व्यक्तिगत रूप से, मैं हमेशा उपयोग करता हूं string.Empty
।
बस हर डेवलपर के बारे में पता चल जाएगा कि "" का अर्थ क्या है। मैंने व्यक्तिगत रूप से स्ट्रिंग का सामना किया। पहली बार खाली किया और यह जानने के लिए कि क्या वे वास्तव में एक ही चीज़ हैं , यह जानने के लिए गूगल पर कुछ समय बिताना होगा ।
string.Empty
? क्या आप जानते हैं कि आपने ""
पहली बार क्या देखा था?
यह विषय बहुत पुराना और लंबा है, इसलिए मुझे क्षमा करें यदि इस व्यवहार का कहीं और उल्लेख किया गया है। (और मुझे उस उत्तर की ओर इंगित करें जो इसे कवर करता है)
यदि आप उपयोग करते हैं तो मुझे संकलक के व्यवहार में अंतर मिला है string.Empty
या डबल उद्धरण । यदि आप स्ट्रिंग स्ट्रिंग का उपयोग नहीं करते हैं, तो यह अंतर दिखाता है।
प्रारंभिक string.Empty
संकलक चेतावनी के मामले में
CS0219 - The variable 'x' is assigned but its value is never used
अपेक्षित उद्धरण मिलने पर दोहरे उद्धरण चिह्नों के साथ आरंभ करने के मामले में कभी भी उत्सर्जित नहीं किया जाता है।
इस लिंक पर कनेक्ट आलेख में इस व्यवहार को समझाया गया है: https://connect.microsoft.com/VisualStudio/feedback/details/799810/c-warning-cs0219-not-reported-when-assign-non-constant-value
मूल रूप से, अगर मुझे यह सही लगता है, तो वे प्रोग्रामर को चेतावनी संदेश के साथ परेशान किए बिना डिबगिंग उद्देश्यों के लिए एक फ़ंक्शन के रिटर्न मान के साथ एक चर सेट करने की अनुमति देना चाहते हैं और इस प्रकार उन्होंने केवल काम के असाइनमेंट और स्ट्रिंग के मामले में चेतावनी को सीमित कर दिया है। खाली एक स्थिर नहीं बल्कि एक क्षेत्र है।
var unused = "literal";
संकलक द्वारा एक घोषणा को पूरी तरह से दूर (हटा) किया जा सकता है। इसका कोई साइड इफेक्ट नहीं हो सकता है। दूसरी ओर, var unused = MyClass.Member;
पूरी तरह से हटाया नहीं जा सकता। ऐसा इसलिए है क्योंकि पढ़ने के Member
दुष्प्रभाव हो सकते हैं। यदि Member
एक एक्सेसर के साथ एक स्थिर संपत्ति है get
, तो यह स्पष्ट है कि कॉल करने वाले को कॉल करना होगा। लेकिन यहां तक कि अगर Member
एक स्थिर क्षेत्र है, तो साइड इफेक्ट हो सकता है जो स्थैतिक निर्माता चला सकता है। यकीन है कि यह इस तरह से इसे करने के लिए बुरा कोडिंग शैली होगा । लेकिन आपको पढ़ने के लिए एक डमी की आवश्यकता है Member
।
मैंने सांत्वना अनुप्रयोग में निम्न विधि का उपयोग करके यह बहुत ही सरल परीक्षण किया:
private static void CompareStringConstants()
{
string str1 = "";
string str2 = string.Empty;
string str3 = String.Empty;
Console.WriteLine(object.ReferenceEquals(str1, str2)); //prints True
Console.WriteLine(object.ReferenceEquals(str2, str3)); //prints True
}
यह स्पष्ट रूप से बताता है कि सभी तीन चर क्रमशः str1
, str2
और str3
हालांकि अलग-अलग वाक्यविन्यास का उपयोग करके आरंभिक रूप से स्मृति में बिल्कुल एक ही स्ट्रिंग (शून्य लंबाई) ऑब्जेक्ट की ओर इशारा कर रहे हैं। मैंने .NET 4.5 कंसोल एप्लिकेशन में यह परीक्षण किया। इसलिए आंतरिक रूप से उनमें कोई अंतर नहीं है और यह सब सुविधा के लिए उबलता है, जिसे आप प्रोग्रामर के रूप में उपयोग करना चाहते हैं। स्ट्रिंग क्लास के इस व्यवहार को .NET में स्ट्रिंग इंटर्निंग के रूप में जाना जाता है । इस अवधारणा का वर्णन करते हुए एरिक लिपर्ट का यहाँ बहुत अच्छा ब्लॉग है ।
ऊपर मे से कोई।
वहाँ कई, कई बेहतर चीजें हैं pontificate है। जैसे कि किस रंग की छाल एक पेड़ पर सबसे अच्छी लगती है, मुझे लगता है कि डल्सेट मॉस के टिंग के साथ अस्पष्ट भूरा है।
मैं दृढ़ता से स्ट्रिंग पसंद करता हूँ। खाली, अन्य कारणों से अलग आपको यह सुनिश्चित करने के लिए कि यह क्या है और आपने गलती से सामग्री को हटा नहीं दिया है, लेकिन मुख्य रूप से अंतर्राष्ट्रीयकरण के लिए। यदि मुझे उद्धरण में एक स्ट्रिंग दिखाई देती है तो मुझे हमेशा आश्चर्य होता है कि क्या यह नया कोड है और इसे एक स्ट्रिंग तालिका में रखा जाना चाहिए। इसलिए हर बार कोड बदल जाता है / समीक्षा की जाती है कि आपको "उद्धरणों में कुछ" देखने की ज़रूरत है और हाँ आप खाली तारों को फ़िल्टर कर सकते हैं, लेकिन मैं लोगों से कहता हूँ कि उद्धरणों में कभी तार न डालें तो अच्छा है जब तक आपको पता नहीं चलेगा कि यह स्थानीयकृत नहीं होगा। ।
किसी ने उल्लेख नहीं किया कि VisualStudio स्ट्रिंग में अलग-अलग रंग का कोड है। जो पठनीयता के लिए महत्वपूर्ण है। इसके अलावा, लोअर केस आमतौर पर वेरिएस और टाइप के लिए उपयोग किया जाता है, एक बड़ी बात नहीं है, लेकिन String.Empty एक स्थिरांक है, न कि एक var या टाइप।
string
का पर्यायवाची है System.String
प्रकार , वे समान हैं।
मान भी समान हैं: string.Empty == String.Empty == ""
मैं कोड में चरित्र लगातार प्रयोग करेंगे नहीं "" है, बल्कि string.Empty
या String.Empty
- देखना आसान प्रोग्रामर क्या मतलब।
के बीच string
और String
मुझे लोअर केस string
ज्यादा पसंद है क्योंकि मैं डेल्फी के साथ बहुत सालों से काम करता था और डेल्फी स्टाइल लोअरकेस हैstring
।
इसलिए, अगर मैं आपका बॉस होता, तो आप लिख रहे होते string.Empty
मैं एहसान होगा string.Empty
खत्म हो गया String.Empty
क्योंकि आप इसे एक को शामिल करने की जरूरत के बिना उपयोग कर सकते हैंusing System;
आपकी फ़ाइल में।
पिकिंग ""
ओवर के लिए string.Empty
, यह व्यक्तिगत प्राथमिकता है और इसे आपकी टीम द्वारा तय किया जाना चाहिए।
string.Empty
बिना using System
नाम स्थान के आयात का निरंतर उपयोग कैसे संभव है - C # में कीवर्ड बस अपने पूरी तरह से योग्य नाम में परिवर्तित हो जाते हैं जिसमें नाम शामिल होने से पहले और साथ ही आउटपुट में MSIL लिखा होता है * .dll या *। exe फ़ाइल। इतनी प्रभावी string.Empty
रूप System.String.Empty
से कंपाइलर द्वारा MSIL में लिखा गया है। और जैसा कि आप पहले से ही जानते होंगे कि यदि आप पूरी तरह से योग्य नाम का उल्लेख करते हैं, तो आप अपनी कोड फ़ाइल के शीर्ष पर नाम स्थान आयात करने के लिए छोड़ सकते हैं।
मुझे कोई फर्क नहीं पड़ता। अंतिम हालांकि टाइप करने के लिए सबसे तेज है :)
इससे कोई फर्क नहीं पड़ता - वे बिल्कुल एक ही चीज हैं। हालांकि, मुख्य बात यह है कि आप सुसंगत होना चाहिए
ps मैं हर समय "सही बात क्या है" के इस प्रकार के साथ संघर्ष करता हूं।
यह पूरी तरह से एक कोड-शैली प्राथमिकता है, जो .NET को स्ट्रिंग्स को संभालती है। हालाँकि, यहाँ मेरी राय है :)
मैं हमेशा BCL प्रकार के नामों का उपयोग करता हूं जब स्थैतिक तरीकों, गुणों और क्षेत्रों तक पहुंच होती है: String.Empty
या Int32.TryParse(...)
याDouble.Epsilon
मैं हमेशा नए उदाहरणों की घोषणा करते समय C # कीवर्ड का उपयोग करता हूं: int i = 0;
याstring foo = "bar";
मैं शायद ही कभी अघोषित स्ट्रिंग शाब्दिक का उपयोग करता हूं क्योंकि मुझे कोड को स्कैन करने में सक्षम होने के लिए उन्हें पुन: प्रयोज्य नामित स्थिरांक में जोड़ना पसंद है। कंपाइलर स्थिरांक को शाब्दिक रूप से प्रतिस्थापित करता है, इसलिए यह जादू के तार / संख्याओं से बचने और एक नाम के साथ उन्हें थोड़ा अधिक अर्थ देने का एक तरीका है। साथ ही मूल्यों को बदलना आसान है।
मैं तीसरे का उपयोग करता हूं, लेकिन अन्य दो पहले कम अजीब लगते हैं। स्ट्रिंग स्ट्रिंग के लिए एक उपनाम है, लेकिन उन्हें एक असाइनमेंट में देखकर बंद महसूस होता है।
या तो पहले दो के लिए मुझे स्वीकार्य होगा। मैं पिछले एक से बचना चाहूंगा क्योंकि उद्धरणों के बीच एक जगह डालकर बग को पेश करना अपेक्षाकृत आसान है। इस विशेष बग को अवलोकन द्वारा खोजना मुश्किल होगा। कोई टाइपो नहीं मानते हुए, सभी शब्दार्थ के समकक्ष हैं।
[संपादित करें]
इसके अलावा, आप हमेशा string
या तो या String
निरंतरता के लिए उपयोग कर सकते हैं , लेकिन यह सिर्फ मैं ही हूं।
मैंने व्यक्तिगत रूप से दो बार (छोटी) समस्याओं के परिणामस्वरूप "" देखा है। एक बार टीम-आधारित प्रोग्रामिंग में एक जूनियर डेवलपर नए की गलती के कारण, और दूसरा एक सरल टाइपो था, लेकिन यह तथ्य स्ट्रिंग का उपयोग कर रहा है। खाली दोनों मुद्दों से बचना होगा।
हां, यह एक निर्णय कॉल है, लेकिन जब कोई भाषा आपको चीजों को करने के कई तरीके देती है, तो मैं उस व्यक्ति की ओर झुक जाता हूं जिसके पास सबसे अधिक संकलक निरीक्षण और सबसे मजबूत संकलन-समय प्रवर्तन है। वह "" नहीं है । यह विशिष्ट इरादे व्यक्त करने के बारे में है।
यदि आप string.EMpty या Strng.Empty टाइप करते हैं, तो कंपाइलर आपको बता देता है कि आपने इसे गलत किया है। तुरंत ही। यह बस संकलन नहीं करेगा। एक डेवलपर के रूप में आप विशिष्ट इरादे का हवाला दे रहे हैं कि संकलक (या अन्य डेवलपर) किसी भी तरह से गलत व्याख्या नहीं कर सकता है, और जब आप इसे गलत करते हैं, तो आप बग नहीं बना सकते हैं।
यदि आप "" जब आपका मतलब है "टाइप करते हैं या इसके विपरीत, संकलक खुशी से वही करता है जो आपने इसे करने के लिए कहा था। एक और डेवलपर आपके विशिष्ट इरादे को चमकने में सक्षम हो भी सकता है और नहीं भी। बग बनाया।
स्ट्रिंग से बहुत पहले। खाली एक चीज थी जो मैंने एक मानक पुस्तकालय का उपयोग किया है जो EMPTY_STRING निरंतर को परिभाषित करता है। हम अभी भी उस स्थिति में स्टेटमेंट का उपयोग करते हैं जहां string.Empty की अनुमति नहीं है।
जब भी संभव हो, संकलक को आपके लिए काम करने के लिए रखें, और मानव त्रुटि की संभावना को खत्म करें, चाहे कितना छोटा हो। IMO, यह ट्रम्प "पठनीयता" है जैसा कि अन्य ने उद्धृत किया है।
विशिष्टता और संकलन समय प्रवर्तन। यह रात के खाने के लिए क्या है।
संकलक को लंबे समय में उन्हें समान बनाना चाहिए। एक मानक चुनें, ताकि आपका कोड पढ़ने में आसान हो, और इसके साथ चिपके रहें।
मैं बस कुछ कोड देख रहा था और यह सवाल मेरे दिमाग में कौंध गया, जिसे मैंने कुछ समय पहले पढ़ा था। यह निश्चित रूप से पठनीयता का सवाल है।
निम्नलिखित सी # कोड पर विचार करें ...
(customer == null) ? "" : customer.Name
बनाम
(customer == null) ? string.empty : customer.Name
मुझे व्यक्तिगत रूप से उत्तरार्द्ध कम अस्पष्ट और पढ़ने में आसान लगता है।
जैसा कि अन्य लोगों द्वारा बताया गया है कि वास्तविक अंतर नगण्य हैं।
जबकि अंतर बहुत है, बहुत कम, अंतर अभी भी मौजूद है।
1) "" वस्तु बनाता है जबकि String.Empty नहीं करता है। लेकिन यह ऑब्जेक्ट एक बार बनाया जाएगा और बाद में स्ट्रिंग पूल से संदर्भित किया जाएगा यदि आपके पास कोड में एक और "" है।
2) स्ट्रिंग और स्ट्रिंग एक ही हैं, लेकिन मैं स्ट्रिंग का उपयोग करने की सलाह दूंगा। सी # कोडिंग मानक।
पर http://blogs.msdn.com/b/brada/archive/2003/04/22/49997.aspx :
जैसा कि डेविड का कहना है, के बीच अंतर है
String.Empty
और""
बहुत छोटे हैं, लेकिन एक अंतर है।""
वास्तव में एक ऑब्जेक्ट बनाता है, यह संभवतः स्ट्रिंग इंटर्न पूल से बाहर निकाला जाएगा, लेकिन फिर भी ... जबकिString.Empty
कोई ऑब्जेक्ट नहीं बनाता है ... इसलिए यदि आप वास्तव में स्मृति दक्षता में देख रहे हैं, तो मैं सुझाव देता हूंString.Empty
। हालाँकि, आपको यह ध्यान रखना चाहिए कि अंतर इतना सुव्यवस्थित है कि आप इसे अपने कोड में कभी नहीं देख पाएंगे ...
जैसा किSystem.String.Empty
याstring.Empty
याString.Empty
... मेरा देखभाल स्तर कम है; ;-)
खाली स्ट्रिंग एक नाम मात्र के खाली सेट की तरह है जिसे हर कोई कॉल करने के लिए उपयोग करता है ""
। साथ ही औपचारिक भाषाओं में एक वर्णमाला से निर्मित तार होते हैं जिनकी लंबाई शून्य होती है जिन्हें रिक्त स्ट्रिंग कहा जाता है। सेट और स्ट्रिंग दोनों के लिए एक विशेष प्रतीक है। खाली स्ट्रिंग: ε और खाली सेट: ε। यदि आप इस शून्य लंबाई स्ट्रिंग के बारे में बात करना चाहते हैं, तो आप इसे खाली स्ट्रिंग कहेंगे, ताकि हर कोई जानता हो कि आप क्या उल्लेख कर रहे हैं। अब यदि आप इसे खाली स्ट्रिंग का नाम देते हैं तो string.Empty
कोड में उपयोग क्यों नहीं करते हैं , इसका उद्देश्य स्पष्ट है। नकारात्मक पक्ष यह है कि यह एक स्थिर नहीं है और इसलिए हर जगह उपलब्ध नहीं है, जैसे विशेषताओं में। (यह कुछ तकनीकी कारणों से स्थिर नहीं है, संदर्भ स्रोत देखें।)
मैं पसंद करता हूं ""
क्योंकि यह छोटा है और String.Empty
एक ऐसी समस्या को हल करता है जो मौजूद नहीं है।