2010-07-18 14 views
13

संभव डुप्लिकेट:
How should I concatenate strings?सी #: सबसे पठनीय स्ट्रिंग concatenation। सबसे अच्छा अभ्यास

वहाँ प्रतिदिन के कार्यों में तार concat के कई तरीके हैं जब प्रदर्शन important नहीं है।

  • result = a + ":" + b
  • result = string.Concat(a, ":", c)
  • result = string.Format("{0}:{1}", a, b);
  • StringBuilder approach
  • ...?

आप क्या पसंद करते हैं और क्यों दक्षता कोई फर्क नहीं पड़ता है लेकिन आप अपने स्वाद के लिए कोड को सबसे अधिक पढ़ने योग्य रखना चाहते हैं?

+0

हाँ, वे इसी तरह लग रही है लेकिन मैं नहीं भीतरी कार्यान्वयन और प्रदर्शन को ध्यान में रखते पठनीयता पहलू पर ध्यान केंद्रित करना चाहते हैं। –

+0

एफडब्ल्यूआईडब्ल्यू, मुझे विश्वास है कि '+' ऑपरेटर नक्शे 'कंसैट' विधि पर वैसे भी है, इसलिए पहले दो उदाहरण बराबर हैं। –

+0

@musicfreak: एक आईएल परिप्रेक्ष्य से वे एक पठनीयता परिप्रेक्ष्य से समकक्ष हो सकते हैं, वे निश्चित रूप से नहीं हैं। – Steven

उत्तर

8

string.Format मेरे लिए, लेकिन व्यावहारिक रूप से मैं जो भी उद्देश्य के लिए उपयुक्त है, खाता प्रदर्शन और पठनीयता में ध्यान देता हूं।

यदि यह दो चर थे जिनका उपयोग मैं करता था।

string.Concat(str1, str2);

यदि यह एक निरंतर या कुछ और है कि तब स्वरूपण की आवश्यकता है निहित।

string.Format("{0} + {1} = {2}", x, y, x + y);

या एक SQL क्वेरी

string SqlQuery = "SELECT col1, col2, col3, col4" + 
        "FROM table t " + 
        "WHERE col1 = 1"; 

और स्ट्रिंग बिल्डर जब प्रदर्शन मामलों की तरह कुछ के लिए।

+0

समयपूर्व अनुकूलन सभी बुराइयों की जड़ है। या कुछ इस तरह का। पठनीयता के लिए – strager

+1

+1। विधि के लिए –

+0

+1। मैंने एक छोटा सा कट भी बनाया है जिसका उपयोग मैं अक्सर – gnome

2

String.Format(...) सबसे धीमा है।

लूप में नहीं होने वाले सरल संयोजनों के लिए, String.Concat(...) या + ऑपरेटर का उपयोग करें, जो हुड के तहत इसका अनुवाद करता है, afaik। अधिक पठनीय क्या है बहुत ही व्यक्तिपरक है।

सरल concatenations के लिए StringBuilder का उपयोग सरल concatenations के लिए शीर्ष पर शीर्ष है और सबसे ज्यादा संभावना है कि अधिकतर ओवरहेड है। मैं केवल इसे लूप में उपयोग करता हूं।

+0

धन्यवाद, लेकिन आप सामान्य कॉन्सटेनेट स्ट्रिंग कैसे करते हैं? प्रारूप, +, Concat? –

+0

मैं निष्पादन पर पूरी तरह से निर्णय नहीं लेता, जब तक प्रदर्शन बिल्कुल महत्वपूर्ण नहीं होता है और यह साबित होता है कि एक विशेष स्ट्रिंग। गंभीर प्रदर्शन समस्याओं के लिए फोर्मेट कॉल को दोषी ठहराया गया था। आपको आम तौर पर प्रदर्शन के लिए पठनीयता और रखरखाव पसंद करना चाहिए। ऐसा कहा जा रहा है कि मुझे इस जवाब के साथ कोई समस्या नहीं है क्योंकि यह तथ्यात्मक है, लेकिन यह सिर्फ मुझे मारता है कि निहितार्थ यह है कि प्रदर्शन राजा है, और हकीकत में यह आपका अंतिम विचार होना चाहिए कि गति में अंतर को मापने के अंशों में मापा जाता है मिलीसेकंड। – mattmc3

+2

सबसे 'आम' जिस तरह से उपयोग करने के लिए '+' या 'Concat', जो हुड के नीचे एक ही से अनुवाद afaik, और जो आप पा अधिक पठनीय बहुत व्यक्तिपरक है। मैं सरल चीजों के लिए 'String.Format (...)' का उपयोग नहीं करता क्योंकि यह धीमा है (स्वरूप स्ट्रिंग को पार्स करना है) और अधिक त्रुटि प्रवण है। – herzmeister

1
  • String.Format

    कुछ concats के लिए। अधिक जानकारी के लिए मैं उपयोग

  • StringBuilder दृष्टिकोण

भले ही प्रदर्शन महत्वपूर्ण नहीं है। एक टीम समझौता है जिसे मुझे

+0

धन्यवाद, हम वही करते हैं। हालांकि कुछ डेवलपर्स स्थानीयकरण के बिंदु के लिए + –

2

ऐसा कुछ करने के लिए (जो मुझे लगता है कि यूआई को भेजा जा रहा है) का पालन करना है, तो मैं निश्चित रूप से String.Format पसंद करूंगा।यह स्ट्रिंग को अंतर्राष्ट्रीयकृत करने की अनुमति देता है; आप String.Format पर कॉल के लिए grep कर सकते हैं और उन्हें अपने अनुवाद प्रारूप के साथ बदल सकते हैं।

+1

+1 का उपयोग करते हैं। अंतिम वाक्य के लिए –

2

मेरे निजी पसंद है:

मैं + सबसे पठनीय दृष्टिकोण और केवल स्वरूप() या एक StringBuilder का उपयोग करता है, तो इसका कोई खास कारण (i18n, प्रदर्शन आदि) इसके लिए है। मैं (लगभग) कभी कंसट का उपयोग नहीं करता हूं।

मुझे लगता है कि मुझे प्रारूप() से पढ़ने के लिए + दृष्टिकोण को आसानी से ढूंढना आसान लगता है क्योंकि मुझे यह देखने के लिए अंत में आगे बढ़ना नहीं है कि {} प्लेसहोल्डर में कौन से चर डाले गए हैं। और यदि प्लेसहोल्डर संख्यात्मक क्रम में नहीं हैं, तो यह इमो पढ़ने के लिए भी कठिन हो जाता है।

लेकिन मैं बड़ी परियोजनाओं के लिए यह समझ में आता है सिर्फ एक शैली गाइड द्वारा प्रारूप का उपयोग कर सिर्फ मामले में कोड हो सकता है (फिर से) एक परियोजना पर बाद में i18n की आवश्यकता होती है में प्रयोग किया जाता लागू करने के लिए लगता है।

8

यह उपयोग पर निर्भर करता है। जब आप केवल दो स्ट्रिंग्स को जोड़ना चाहते हैं, a + b का उपयोग string.Format("{0}{1}", a, b) से कहीं अधिक पठनीय है। हालांकि, यह अधिक जटिल हो रहा है, मैं string.Format का उपयोग करना पसंद करता हूं। इस की तुलना करें:

string x = string.Format("-{0}- ({1})", a, b); 

के खिलाफ:

string x = "-" + a + "- (" + b + ")"; 

मुझे लगता है कि ज्यादातर मामलों में यह काम करने के लिए सबसे पठनीय रास्ते को पहचानना बहुत आसान है। उन मामलों में जहां यह बहस योग्य है, केवल एक पठनीय है, क्योंकि आपका बॉस इन व्यर्थ विचारों के लिए भुगतान नहीं कर रहा है ;-)

+2

+1। :) ज्यादातर समय यह वास्तव में कोई फर्क नहीं पड़ता; आप कौन सी स्ट्रिंग कॉन्सटेनेशन विधि का उपयोग करने का निर्णय लेने से कुछ और उत्पादक कर सकते हैं। –

+3

सहमत हैं, लेकिन जब आप उस कोड को बनाए रखना चाहते हैं तो आप या किसी और ने क्या किया है, फिर से सीखने में व्यतीत समय को मापना मुश्किल है। अक्सर पढ़ने और समझने में कुछ आसान खर्च करने में कुछ अतिरिक्त सेकंड्स आपको बाद में सहेज लेते हैं जब आप पहले से ही समस्या में पूरी तरह से नहीं हैं और कुछ ठीक करना है। तो आप समझने योग्य कोड लिखना और अच्छी आदतें विकसित करना चाहते हैं। रखरखाव आपके डेवलपर्स के लिए सबसे बड़ी लागतों में से एक है, और ऐसा कुछ है जो आपके मालिक को निश्चित रूप से चिंतित होना चाहिए। – mattmc3

+2

@mattmc: डीजीएमडब्लू: मुझे लगता है कि रखरखाव (शुद्धता के बाद) सॉफ्टवेयर के सबसे महत्वपूर्ण पहलुओं है। मैंने अपने करियर में बहुत सारे खराब कोड देखे हैं जो एक रखरखाव दुःस्वप्न बन गया है। अपने कॉलेजों के साथ चर्चा करना सबसे ज्यादा पढ़ने योग्य चीज़ों के बारे में सामान्य सहमति प्राप्त करना महत्वपूर्ण है। हालांकि, उस और उत्पादकता के बीच हमेशा एक व्यापार बंद है। जैसा कि आपने कहा था, यह मापना मुश्किल है कि ब्रेक-इवेंट पॉइंट कहां है। इन चर्चाओं को ध्यान में रखना एक बिंदु तक उपयोगी है। मैंने जो कहने की कोशिश की थी वह था कि कई स्वादों के बारे में अंतहीन चर्चाएं जो पठनीयता में बहुत करीब हैं, बहुत उपयोगी नहीं है। – Steven

1

मैं स्ट्रिंग को पसंद करता हूं। छोटे तारों के लिए फोर्मेट, और स्ट्रिंगबिल्डर बड़े लोगों के लिए। मेरा मुख्य कारण पठनीयता है। String.Format (या StringBuilder.AppendFormat()) का उपयोग करने के लिए यह मेरे लिए बहुत अधिक पठनीय है, लेकिन मुझे यह मानना ​​है कि यह केवल व्यक्तिगत वरीयता है।

वास्तव में बड़ी पाठ पीढ़ी के लिए, आप नए (VS2010) टी -4 preprocessed टेम्पलेट्स के उपयोग पर विचार करना चाह सकते हैं - वे वास्तव में अच्छा कर रहे हैं।

इसके अलावा, यदि आप कभी भी वीबी.नेट में हैं, तो मुझे एक्सएमएल शाब्दिक तकनीक कैथलीन डॉलर पसंद है episode 152 of hanselminutes में बात की।

सरल concatenations के लिए String.Concat तरह String.Concat("foo", bar);

String.Format जटिल प्रारूपण के लिए की तरह String.Format("<a href=\"{0}\">{1}</a>", url, text);

की तरह बड़े पैमाने पर concatenations के लिए StringBuilder:

var sb = new StringBuilder(); 
sb.AppendLine("function fooBar() {"); 
sp.AppendLine(String.Join(Environment.NewLine, blah)); 
sp.AppendLine("}"); 
page.RegisterClientScript(page.GetType(), sb.ToString()); 

"foo" + "bar" से बचने के लिए पसंद करते हैं

+0

यह भी ध्यान रखें कि 'string.Format' आंतरिक रूप से' स्ट्रिंगबिल्डर 'का उपयोग करता है। – Steven

1

उपयोग करने के लिए पसंद करते हैं (साथ ही if (foo == "bar")। और विशेष रूप से String.Format("{0}{1}", foo, bar) और

throw new Exception("This code was" + 
    "written by developer with" + 
    "13\" monitor"); 
संबंधित मुद्दे