c# - सी#में, क्या मुझे स्ट्रिंग का उपयोग करना चाहिए। लक्षण या स्ट्रिंग। लक्षण या स्ट्रिंग को आरंभ करने के लिए?




.net string (20)

सी # में, मैं एक स्ट्रिंग मान को खाली स्ट्रिंग के साथ प्रारंभ करना चाहता हूं।

मुझे यह कैसे करना चाहिए? सही तरीका क्या है, और क्यों?

string willi = string.Empty;

या

string willi = String.Empty;

या

string willi = "";

और क्या?


इससे कोई फर्क नहीं पड़ता - वे बिल्कुल वही बात हैं। हालांकि, मुख्य बात यह है कि आपको सुसंगत होना चाहिए

पीएस मैं इस तरह के "हर समय सही चीज़" के साथ संघर्ष करता हूं।


ऊपर मे से कोई।

प्रमाणित करने के लिए कई, कई बेहतर चीजें हैं। जैसे कि रंग छाल एक पेड़ को सबसे अच्छी तरह से उपयुक्त बनाता है, मुझे लगता है कि डल्सेट मॉस के टिंगों के साथ अस्पष्ट भूरा लगता है।


कंपाइलर को उन्हें लंबे समय तक समान बनाना चाहिए। एक मानक चुनें ताकि आपका कोड पढ़ना आसान हो, और इसके साथ चिपके रहें।


किसी ने भी उल्लेख नहीं किया है कि विजुअलस्टूडियो स्ट्रिंग में स्ट्रिंग को अलग-अलग कोड किया गया है। पठनीयता के लिए कौन सा महत्वपूर्ण है। इसके अलावा, निचले मामले का आमतौर पर वर्रों और प्रकार के लिए उपयोग किया जाता है, न कि एक बड़ा सौदा बल्कि स्ट्रिंग। लक्षण एक निरंतर है और एक var या प्रकार नहीं है।


जबकि अंतर बहुत है, बहुत कम, अंतर अभी भी मौजूद है।

1) "" स्ट्रिंग के दौरान ऑब्जेक्ट बनाता है। लक्षण नहीं है। लेकिन यह ऑब्जेक्ट एक बार बनाया जाएगा और यदि आपके पास कोड में कोई अन्य कोड है तो बाद में स्ट्रिंग पूल से संदर्भित किया जाएगा।

2) स्ट्रिंग और स्ट्रिंग समान हैं, लेकिन मैं स्ट्रिंग.एक्टी (साथ ही स्ट्रिंग.फॉर्मैट, स्ट्रिंग.कॉपी इत्यादि) का उपयोग करने की सलाह दूंगा क्योंकि डॉट नोटेशन कक्षा को इंगित करता है, ऑपरेटर नहीं, और पूंजी पत्र से शुरू होने वाली कक्षा के अनुरूप है सी # कोडिंग मानकों।


पहले दो में से कोई भी मुझे स्वीकार्य होगा। मैं आखिरी से बचूंगा क्योंकि कोट्स के बीच एक जगह डालकर बग पेश करना अपेक्षाकृत आसान है। अवलोकन द्वारा यह विशेष बग खोजना मुश्किल होगा। कोई टाइपो मानते हैं, सभी अर्थात् समकक्ष हैं।

[संपादित करें]

साथ ही, आप हमेशा स्थिरता के लिए string या String उपयोग करना चाहेंगे, लेकिन यह सिर्फ मुझे है।


मुझे लगता है कि दूसरा "उचित" है, लेकिन ईमानदार होने के लिए मुझे नहीं लगता कि इससे कोई फर्क नहीं पड़ता। कंपाइलर को किसी भी बाइटकोड को संकलित करने के लिए पर्याप्त स्मार्ट होना चाहिए। मैं खुद का उपयोग करता हूं।


मैं string.Empty पक्ष string.Empty पर string.Empty क्योंकि आप इसका उपयोग किसी using System; करने के बिना कर सकते हैं using System; आपकी फाइल में

string.Empty पर पिकिंग के लिए। "" string.Empty , यह व्यक्तिगत वरीयता है और आपकी टीम द्वारा तय किया जाना चाहिए।


मैं अंदर जाने वाला नहीं था, लेकिन मुझे यहां कुछ गलत जानकारी मिल रही है।

मैं, व्यक्तिगत रूप से, string.Empty पसंद करते हैं। string.Empty । यह एक व्यक्तिगत वरीयता है, और मैं किसी भी टीम की इच्छा के साथ झुकता हूं जो मैं केस-दर-मामले आधार पर करता हूं।

जैसा कि कुछ अन्य ने उल्लेख किया है, string.Empty बीच string.Empty कोई अंतर नहीं है। string.Empty और string.Emptystring.Empty

इसके अतिरिक्त, और यह एक छोटा ज्ञात तथ्य है, "" का प्रयोग पूरी तरह से स्वीकार्य है। "" के हर उदाहरण, अन्य वातावरण में, एक वस्तु बना देगा। हालांकि, .NET अपने तारों को प्रशिक्षित करता है, इसलिए भविष्य के उदाहरण इंटर्न पूल से एक ही अपरिवर्तनीय स्ट्रिंग खींचेंगे, और कोई भी प्रदर्शन हिट नगण्य होगी। स्रोत: ब्रैड अब्राम


मैं इसका उपयोग करता हूं क्योंकि यह मेरे कोड में अलग-अलग पीले रंग का रंग होगा ... किसी कारण से स्ट्रिंग। लक्षण मेरे विजुअल स्टूडियो कोड थीम में सभी सफेद है। और मेरा मानना ​​है कि मेरे लिए सबसे महत्वपूर्ण है।


मैं तीसरे का उपयोग करता हूं, लेकिन दूसरे दो में से पहला कम अजीब लगता है। स्ट्रिंग स्ट्रिंग के लिए एक उपनाम है, लेकिन उन्हें एक असाइनमेंट में देखकर महसूस होता है।


मैं दृढ़ता से स्ट्रिंग पसंद करता हूं। अन्य कारणों से अलग, यह सुनिश्चित करने के लिए कि आप क्या जानते हैं और आपने गलती से सामग्री को हटाया नहीं है, बल्कि मुख्य रूप से अंतर्राष्ट्रीयकरण के लिए। अगर मुझे उद्धरणों में एक स्ट्रिंग दिखाई देती है तो मुझे हमेशा आश्चर्य करना होगा कि क्या यह नया कोड है और इसे स्ट्रिंग टेबल में रखा जाना चाहिए। इसलिए हर बार कोड बदल जाता है / समीक्षा की जाती है, आपको "उद्धरण में कुछ" देखने की ज़रूरत होती है और हां आप खाली तारों को फ़िल्टर कर सकते हैं लेकिन मैं लोगों को बताता हूं कि उद्धरणों में तार कभी नहीं डालना अच्छा अभ्यास है जब तक आपको पता न हो कि यह स्थानीयकृत नहीं होगा ।


मैं व्यक्तिगत रूप से पसंद करता हूं जब तक कि कुछ और जटिल होने का कोई अच्छा कारण न हो।


मैंने कंसोल एप्लिकेशन में निम्न फ़ंक्शन का उपयोग करके यह बहुत ही सरल परीक्षण किया:

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
}

यह स्पष्ट रूप से सुझाव देता है कि विभिन्न तीन str2 अर्थात् str1 , str2 और str3 हालांकि विभिन्न वाक्यविन्यास का उपयोग करके प्रारंभ किया जा रहा है लेकिन स्मृति में बिल्कुल समान स्ट्रिंग (शून्य लंबाई) ऑब्जेक्ट को इंगित कर रहे हैं। मैंने इस परीक्षण को नेट 4.5 कंसोल एप्लिकेशन में किया। तो आंतरिक रूप से उनके पास कोई फर्क नहीं पड़ता है और यह सब एक प्रोग्रामर के रूप में उपयोग करने के लिए आप जिस सुविधा के लिए उपयोग करना चाहते हैं, उस पर उबलता है। स्ट्रिंग क्लास का यह व्यवहार .NET में स्ट्रिंग इंटर्निंग के रूप में जाना जाता है। इस अवधारणा here वर्णन करते हुए एरिक लिपर्ट का एक बहुत अच्छा ब्लॉग here


यह पूरी तरह से कोड-शैली वरीयता है, .NET कैसे तारों को संभालता है। हालांकि, मेरी राय यहाँ हैं :)

स्थिर विधियों, गुणों और फ़ील्ड तक पहुंचने पर मैं हमेशा बीसीएल प्रकार के नामों का उपयोग करता हूं: Double.Epsilon या Double.Epsilon Int32.TryParse(...) या Double.Epsilon

नए उदाहरण घोषित करते समय मैं हमेशा सी # कीवर्ड का उपयोग करता हूं: int i = 0; या string foo = "bar";

मैं शायद ही कभी अविकसित स्ट्रिंग अक्षर का उपयोग करता हूं क्योंकि मुझे कोड को स्कैन करने में सक्षम होना पसंद है ताकि उन्हें पुन: प्रयोज्य नामित स्थिरांक में संयोजित किया जा सके। कंपाइलर स्थिरांक के साथ स्थिरांक को प्रतिस्थापित करता है, इसलिए यह जादू तारों / संख्याओं से बचने और नाम के साथ थोड़ा और अर्थ देने के लिए एक तरीका है। इसके अलावा मूल्यों को बदलना आसान है।


यह विषय बहुत पुराना और लंबा है, इसलिए मुझे क्षमा करें अगर इस व्यवहार का कहीं और उल्लेख किया गया है। (और मुझे उस उत्तर में इंगित करें जो इसे कवर करता है)

यदि आप 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

असल में, अगर मुझे यह सही लगता है, तो वे एक प्रोग्रामर को एक चेतावनी संदेश के साथ परेशान किए बिना डिबगिंग उद्देश्यों के लिए किसी फ़ंक्शन के रिटर्न वैल्यू के साथ एक चर सेट करने की अनुमति देना चाहते हैं और इस प्रकार वे केवल लागत वाले असाइनमेंट और स्ट्रिंग के मामले में चेतावनी सीमित करते हैं। खाली स्थिर नहीं है लेकिन एक क्षेत्र है।


http://blogs.msdn.com/b/brada/archive/2003/04/22/49997.aspx :

जैसा कि डेविड का तात्पर्य है, String.Empty बीच अंतर। String.Empty और "" बहुत छोटे हैं, लेकिन एक अंतर है। "" वास्तव में एक वस्तु बनाता है, यह स्ट्रिंग इंटर्न पूल से बाहर खींच लिया जाएगा, लेकिन फिर भी ... जबकि स्ट्रिंग। String.Empty कोई ऑब्जेक्ट नहीं बनाता है ... इसलिए यदि आप वास्तव में स्मृति दक्षता में अंततः खोज रहे हैं, तो मैं String.Empty सुझाव देता हूं String.Empty हालांकि, आपको यह ध्यान रखना चाहिए कि अंतर इतना छोटा है कि आप इसे अपने कोड में कभी नहीं देख पाएंगे ...
System.String.Empty या string.Empty या String.Empty ... मेरा देखभाल स्तर कम है ;-)


सबसे अच्छा कोड बिल्कुल कोई कोड नहीं है :

कोडिंग की मौलिक प्रकृति यह है कि हमारे कार्य, प्रोग्रामर के रूप में, यह मानना ​​है कि हम जो भी निर्णय लेते हैं वह एक व्यापार-बंद है। [...] ब्रेवटी के साथ शुरू करें। परीक्षण के अनुसार आवश्यक अन्य आयामों को बढ़ाएं।

नतीजतन, कम कोड बेहतर कोड है: string.Empty करने के लिए "" पसंद करें। string.Empty या string.Emptystring.Empty । उन दोनों को कोई अतिरिक्त लाभ नहीं होने के साथ छह गुना अधिक है - निश्चित रूप से कोई स्पष्ट स्पष्टता नहीं है, क्योंकि वे सटीक जानकारी व्यक्त करते हैं।


string सिस्टम के लिए समानार्थी है। string प्रकार, वे समान हैं।

मान भी समान हैं: string.Empty == String.Empty == ""

मैं कोड में स्थिर निरंतर उपयोग नहीं करता, बल्कि string.Empty या string.Empty - यह देखने में आसान है कि प्रोग्रामर का क्या अर्थ है।

string और String बीच मुझे कम केस string पसंद है क्योंकि मैं डेल्फी के साथ कई वर्षों तक काम करता था और डेल्फी शैली लोअरकेस string

तो, अगर मैं तुम्हारा मालिक था, तो आप string.Empty लिख रहे string.Empty


जो भी आप और आपकी टीम को सबसे अधिक पठनीय लगता है उसका प्रयोग करें।

अन्य उत्तरों ने सुझाव दिया है कि हर बार जब आप प्रयोग करते हैं तो एक नई स्ट्रिंग बनाई जाती है। यह सच नहीं है - स्ट्रिंग इंटर्निंग के कारण, यह एक बार प्रति असेंबली या एक बार प्रति एपडोमेन (या संभवतः पूरी प्रक्रिया के लिए एक बार - उस मोर्चे पर निश्चित नहीं) बनाया जाएगा। यह अंतर नगण्य है - बड़े पैमाने पर, बड़े पैमाने पर महत्वहीन।

जो आपको अधिक पठनीय लगता है वह एक अलग मामला है। यह व्यक्तिपरक है और व्यक्ति से अलग-अलग होगा - इसलिए मेरा सुझाव है कि आप यह पता लगाएं कि आपकी टीम के अधिकांश लोग क्या पसंद करते हैं, और सभी इसके साथ स्थिरता के लिए जाते हैं। व्यक्तिगत रूप से मुझे पढ़ने में आसान लगता है।

तर्क यह है कि "" और " " एक दूसरे के लिए आसानी से गलत हैं, वास्तव में मेरे साथ नहीं धोते हैं। जब तक आप एक आनुपातिक फ़ॉन्ट का उपयोग नहीं कर रहे हैं (और मैंने किसी भी डेवलपर्स के साथ काम नहीं किया है) तो अंतर को बताना बहुत आसान है।







initialization