स्ट्रिंग का उपयोग क्यों करें। स्ट्रिंग ऑब्जेक्ट पर असाइन करते समय "ओवर" खाली करें


14

मैं अपने कोड पर स्टाइलकॉप चला रहा हूं और SA1122 में से एक सिफारिश है कि स्ट्रिंग का उपयोग किया जाए। मूल्य के लिए एक खाली स्ट्रिंग असाइन करते समय "" के बजाय खाली है।

मेरा सवाल यह है कि यह सबसे अच्छा अभ्यास क्यों माना जाता है। या, यह सबसे अच्छा अभ्यास माना जाता है? मुझे लगता है कि दोनों कथनों में कोई अंतर नहीं है इसलिए मैं केवल यह सोच सकता हूं कि यह पठनीय बात है?

तो सवाल और जवाब

जॉन स्कीट ने सवाल का जवाब दिया


5
मुझे यकीन है कि यह स्टैक ओवरफ्लो पर पूछा गया था और इसका जवाब दिया गया था - लेकिन मुझे इसे ढूंढने में परेशानी हो रही है। यह इस तथ्य इसके लिए एक नया स्ट्रिंग वस्तु का दृष्टांत नहीं है के साथ क्या करना है "", लेकिन नहींstring.Empty
ChrisF

@ChrisF आह, इस प्रकार के प्रश्न के लिए स्टैक ओवरफ्लो को देखने के लिए नहीं सोचा था। मेरे पास एक गाण्ड होगी।
dreza

1
स्टैकओवरफ़्लो पर सवाल का
ढेर

@ChrisF - यह SO पर पूछा गया है। से अधिक और अधिक और अधिक ...
Oded

1
ये हम चले - stackoverflow.com/questions/151472/... सितंबर 2008 से वापस -
ChrisF

जवाबों:


12

एक वैध कारण यह है कि यह स्पष्ट करता है कि यह एक टाइपो या प्लेसहोल्डर नहीं है, कि आप वास्तव में यहां खाली स्ट्रिंग का उपयोग करने के लिए हैं।

मुझे नहीं पता कि क्या इसे "सबसे अच्छा अभ्यास" माना जाता है।


7

मुझे लगता है कि दो कारण हैं, एक पठनीयता के लिए, और दो एक मामूली प्रदर्शन को बढ़ावा देने के लिए।

पठनीयता आसान है: यह मौके की string.Emptyतुलना में बहुत तेज है ""। के लिए खोज string.Emptyभी आम तौर पर आसान है और शायद शाब्दिक की तलाश से अधिक सटीक होने जा रहा है। यह इरादे को भी स्पष्ट करता है: आपने केवल एक टाइपो नहीं बनाया या कुछ खत्म करना भूल गए, आप वास्तव में खाली स्ट्रिंग चाहते थे।

प्रदर्शन कारण इंटर्निंग के कारण है । आप देखते हैं, रनटाइम पहले इस्तेमाल किए गए स्ट्रिंग्स की एक तालिका रखता है ताकि यह वास्तव में चरित्र-दर-वर्ण जांच किए बिना स्ट्रिंग तुलना कर सके। जहां string.Emptyपहले से ही एक आंतरिक संदर्भ है, ""जहां शाब्दिक रूप से टाइपिंग आपको आंतरिक संस्करण नहीं दे सकती है, इस प्रकार एक मामूली प्रदर्शन हिट हो सकता है।


7
एक नाइटपिक, शाब्दिक टाइपिंग "" आपको हमेशा "" का वही इंटर्न संस्करण देगा, कम से कम .Net 2 और ऊपर।
क्वेंटिन-स्टारिन

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

4
इसके अलावा, मुझे इस बात पर जोर देना चाहिए कि जब मैं मामूली बोलता हूं, तो मेरा मतलब सुपर-टिनी होता है। "प्रदर्शन के कारण" एक प्रतिनिधित्व से दूसरे में स्विच करने का कारण नहीं है, यह रनटाइम के बारे में जानने के लायक सिर्फ एक साफ बात है।
कोडेक्सअर्बनम

4
यह भी ध्यान दिया जाना चाहिए कि प्रदर्शन का पहलू केवल संकलन के लिए सही है। जैसा कि दोनों एक ही आईएल को संकलित करते हैं, रनटाइम प्रदर्शन समान होना चाहिए।
lzcd

उस प्रदर्शन को बढ़ावा केवल संकलन पर होगा
शाफ़्ट सनकी

4

string.Empty वास्तव में कोने के मामले में जीत, जिससे कुछ जादुई बग पैदा हो सकते हैं और वास्तव में डीबग करना मुश्किल है:

यदि इसमें शून्य चौड़ाई का स्थान है ""


0

मैंने पाया कि कुछ प्रलेखन के अनुसार, यह संकलक द्वारा उत्सर्जित के साथ क्या करना है।

एक त्वरित खोज से पता चलता है: http://stylecop.soyuz5.com/SA1122.html

यह विवरण के साथ "पठनीयता नियम" के तहत क्यों दर्ज किया गया है, यह हैरान करने वाला है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.