एक साधारण मामले के लिए जहां यह एक सरल एकल संयोजन है, मुझे लगता है कि यह string.Format(और मैंने परीक्षण नहीं किया है, लेकिन इसकी जटिलता के लायक नहीं है, लेकिन मुझे संदेह है कि इस तरह के एक साधारण मामले के लिए, थोड़ा धीमा string.Format हो सकता है, प्रारूप स्ट्रिंग पार्सिंग के साथ क्या हो सकता है और सभी)। जॉन स्कीट की तरह, मैं स्पष्ट रूप से कॉल नहीं करना पसंद करता हूं.ToString() , क्योंकि यह string.Concat(string, object)ओवरलोड द्वारा अंतर्निहित रूप से किया जाएगा , और मुझे लगता है कि कोड क्लीनर-दिखने वाला है और इसके बिना पढ़ना आसान है।
लेकिन कुछ से अधिक संघनन (कितने व्यक्तिपरक हैं) के लिए, मैं निश्चित रूप से पसंद करता हूं string.Format । एक निश्चित बिंदु पर मैं सोचता हूं कि पठनीयता के साथ पठनीयता और प्रदर्शन दोनों अनावश्यक रूप से पीड़ित हैं।
यदि प्रारूप स्ट्रिंग के कई पैरामीटर हैं (फिर से, "कई" व्यक्तिपरक हैं), मैं आमतौर पर प्रतिस्थापन तर्कों पर टिप्पणी सूचकांकों को शामिल करना पसंद करता हूं, ऐसा नहीं है कि मैं किस पैरामीटर का मान खोता हूं, किस पैरामीटर पर जाता है। एक आकस्मिक उदाहरण:
Console.WriteLine(
"Dear {0} {1},\n\n" +
"Our records indicate that your {2}, \"{3}\", is due for {4} {5} shots.\n" +
"Please call our office at 1-900-382-5633 to make an appointment.\n\n" +
"Thank you,\n" +
"Eastern Veterinary",
/*0*/client.Title,
/*1*/client.LastName,
/*2*/client.Pet.Animal,
/*3*/client.Pet.Name,
/*4*/client.Pet.Gender == Gender.Male ? "his" : "her",
/*5*/client.Pet.Schedule[0]
);
अपडेट करें
यह मेरे लिए होता है कि मैंने जो उदाहरण दिया है, वह थोड़ा भ्रमित करने वाला है, क्योंकि ऐसा प्रतीत होता है कि मैंने सहमति और यहाँ दोनों का उपयोग किया string.Formatहै। और हाँ, तार्किक रूप से और शाब्दिक रूप से, यही मैंने किया है। लेकिन कंसीलर 1 से कॉन्टेक्ट 1 से दूर हो जाएंगे । इसलिए रन-टाइम पर, एक ही स्ट्रिंग होगी। इसलिए मुझे लगता है कि मुझे यह कहना चाहिए कि मैं समय के साथ कई कार्यक्रमों से बचना पसंद करता हूं ।
बेशक, इस विषय में से अधिकांश अब पुराने हैं, जब तक कि आप अभी भी C # 5 या पुराने का उपयोग कर रहे हैं। अब हमारे पास प्रक्षेपित तार हैं , जो पठनीयता के लिए string.Format, लगभग सभी मामलों में बेहतर हैं । इन दिनों, जब तक मैं सीधे एक स्ट्रिंग शाब्दिक की शुरुआत या अंत में एक मान नहीं कर रहा हूं, मैं लगभग हमेशा स्ट्रिंग प्रक्षेप का उपयोग करता हूं। आज, मैं अपने पहले के उदाहरण को इस तरह लिखूंगा:
Console.WriteLine(
$"Dear {client.Title} {client.LastName},\n\n" +
$"Our records indicate that your {client.Pet.Animal}, \"{client.Pet.Name}\", " +
$"is due for {(client.Pet.Gender == Gender.Male ? "his" : "her")} " +
$"{client.Pet.Schedule[0]} shots.\n" +
"Please call our office at 1-900-382-5633 to make an appointment.\n\n" +
"Thank you,\n" +
"Eastern Veterinary"
);
आप इस तरह से संकलन-समय खो देते हैं। प्रत्येक प्रक्षेपित स्ट्रिंग string.Formatको कंपाइलर द्वारा एक कॉल में बदल दिया जाता है , और उनके परिणामों को रन टाइम पर संक्षिप्त किया जाता है। इसका मतलब है कि यह पठनीयता के लिए रन-टाइम प्रदर्शन का एक बलिदान है। अधिकांश समय, यह एक सार्थक बलिदान है, क्योंकि रन-टाइम दंड नगण्य है। प्रदर्शन क्रिटिकल कोड में, हालांकि, आपको विभिन्न समाधानों की रूपरेखा तैयार करनी पड़ सकती है।
1
आप इसे सी # विनिर्देशन में देख सकते हैं :
... निरंतर अभिव्यक्ति में निम्नलिखित निर्माणों की अनुमति है:
...
- पूर्वनिर्धारित + ... बाइनरी ऑपरेटर ...
आप इसे एक छोटे से कोड से भी सत्यापित कर सकते हैं:
const string s =
"This compiles successfully, " +
"and you can see that it will " +
"all be one string (named `s`) " +
"at run time";