स्ट्रिंग संकेंद्रण '+' ऑपरेटर का उपयोग कर


86

को देखते हुए stringकक्षा मेटाडाटा, मैं केवल ऑपरेटरों को देखने ==और !=अतिभारित। तो यह ' +' संचालक के लिए कैसा प्रदर्शन कर सकता है ?

संपादित करें :

एरिक लिप्टर्ट के कुछ दिलचस्प नोट्स स्ट्रिंग कॉन्सेन्टनेशन पर:

भाग 1

भाग 2

भाग 2 में संदर्भित जोएल का एक सुपर लेख भी है ( http://www.joelonsoftware.com/articles/fog0000000319.html )

जवाबों:


143

यह नहीं है - सी # संकलक करता है :)

तो यह कोड:

string x = "hello";
string y = "there";
string z = "chaps";
string all = x + y + z;

वास्तव में संकलित किया जाता है:

string x = "hello";
string y = "there";
string z = "chaps";
string all = string.Concat(x, y, z);

(गाह - हस्तक्षेप से अन्य बिट्स को गलती से हटा दिया गया।)

सी # संकलक देख रही वहाँ कई स्ट्रिंग concatenations यहाँ हैं इस बात का लाभ यह है कि आप एक मध्यवर्ती तार का बनाने न करना पड़े है x + yजो तब के संयोजन के हिस्से के रूप में फिर से कॉपी किया जा करने की जरूरत है (x + y)और z। इसके बजाय, हम यह सब एक ही बार में कर लेते हैं।

संपादित करें: ध्यान दें कि संकलक कुछ भी नहीं कर सकता है यदि आप एक लूप में बदलते हैं। उदाहरण के लिए, यह कोड:

string x = "";
foreach (string y in strings)
{
    x += y;
}

बस के बराबर समाप्त होता है:

string x = "";
foreach (string y in strings)
{
    x = string.Concat(x, y);
}

... तो यह करता है कचरा का एक बहुत उत्पन्न, और क्यों आप एक का उपयोग करना चाहिए यह है StringBuilderइस तरह के मामलों के लिए। मेरे पास दोनों के बारे में अधिक विवरणों में जाने वाला एक लेख है, जो आगे के प्रश्नों के उत्तर देगा।


8
अच्छा उत्तर; बस एक अनुवर्ती सवाल: यदि आप एक लूप के अंदर स्ट्रैटनिंग कर रहे हैं, तो कंपाइलर कैसे काम करता है। कॉनकैट ऑपरेटर जब यह पहले से नहीं जान सकता कि लूप में क्या होने वाला है।
फ्रेंची

आह अच्छा! और यही कारण है कि संघनन के लिए स्ट्रिंगबर्ल का उपयोग करना बेहतर है?
फ्रेंची

4
@frenchie: यही कारण है कि बार-बार संघनन के लिए स्ट्रिंगबर्ल का उपयोग करना बेहतर है ... लेकिन मूल्यों की एक निश्चित संख्या के संघनन के लिए यह इसके लायक क्यों नहीं है ।
जॉन स्कीट

@ जॉन-स्कीट: त्वरित स्पष्टीकरण के लिए धन्यवाद ... मुझे आईएल में भी जांच करनी चाहिए थी..और यह है कि इंट कैसे भी जोड़ता है? ऐड मेथड को कॉल करके?
20ice पर NoviceProgrammer

2
लेकिन ध्यान दें कि आजकल string.Concatऔर string.Joinविधियों में कई अतिभार हैं, जिनमें कुछ IEnumerable<>उदाहरण में शामिल हैं। इसलिए वे ज्यादातर मामलों में उपयोग करने के लिए सुविधाजनक हैं StringBuilder(मैं नहीं जानता कि क्या ये तरीके StringBuilderआंतरिक रूप से उपयोग करते हैं , मैं सिर्फ यह कहता हूं कि वे ज्यादातर मामलों में अधिक सुविधाजनक हैं)।
जेपी स्टिग नीलसन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.