এটি একটি সাধারণ ক্ষেত্রে যেখানে এটি একটি সাধারণ একক যুক্তি, আমি অনুভব করি যে এটির জটিলতার পক্ষে মূল্য নেই string.Format(এবং আমি পরীক্ষাও করি নি, তবে আমি সন্দেহ করি যে এর মতো সরল মামলার জন্য কিছুটা ধীর string.Format হতে পারে, ফরম্যাটের স্ট্রিং পার্সিংয়ের সাথে কী হবে) এবং সব). জন স্কিটির মতো আমিও স্পষ্টভাবে কল করতে পছন্দ করি না .ToString(), যেহেতু এটি string.Concat(string, object)ওভারলোড দ্বারা স্পষ্টভাবে করা হবে এবং আমি মনে করি কোডটি পরিচ্ছন্ন চেহারা এবং এটি ছাড়া পড়া সহজ read
তবে কয়েকটি কনটেন্টেশনেরও বেশি (কতটি বিষয়গত) এটি আমি অবশ্যই পছন্দ করি 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 দ্বারা কনকাটেশনগুলি সমস্তই অপ্টিমাইজ হবে , যেহেতু তারা সমস্ত স্ট্রিং আক্ষরিক। সুতরাং রান-টাইমে, একটি একক স্ট্রিং থাকবে। সুতরাং আমার অনুমান যে আমার বলা উচিত যে আমি রান সময়ে অনেকগুলি কনটেন্টেশন এড়াতে পছন্দ করি ।
অবশ্যই, এই বিষয়টির বেশিরভাগটি এখনই পুরানো, এখন আমাদের কাছে দ্বিখণ্ডিত স্ট্রিং রয়েছে , যা পাঠযোগ্যতার জন্য 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";