ToString ব্যবহার
না, আপনার ToStringএখানে ব্যবহার করা উচিত নয় ।
স্ট্রিং কনটেনটেশন স্বয়ংক্রিয়ভাবে নন-স্ট্রিংগুলিকে স্ট্রিংয়ে রূপান্তরিত করে যার অর্থ আপনার দুটি রূপগুলি প্রায় অভিন্ন ical
যখন একটি বা উভয় অপারেন্ড টাইপ স্ট্রিংয়ের হয়, পূর্বনির্ধারিত সংযোজন অপারেটরগুলি অপারেন্ডগুলির স্ট্রিং উপস্থাপনাকে সম্মতি দেয়।
উত্স: সি # ভাষা নির্দিষ্টকরণ: সংযোজন অপারেটর, এমএসডিএন ।
অন্যদিকে, প্রথমটি (ব্যতীত ToString):
- লেখার চেয়ে কম
- পড়তে খাটো,
- বজায় রাখা সহজ এবং:
- লেখকের ঠিক উদ্দেশ্যটি দেখায়: স্ট্রিংগুলি একত্রিত করতে।
সুতরাং প্রথমটিকে পছন্দ করুন।
ফণা অধীনে
কী আকর্ষণীয় তা হুডের নীচে কী ঘটে তা দেখা see এটি দেখার একটি উপায় হ'ল লিনকিপ্যাডের মধ্যে আইএল কোডটি দেখা। এই প্রোগ্রাম:
void Main()
{
var a = 3;
var b = " Hello";
var c = a + b;
Console.WriteLine(c);
}
নিম্নলিখিত আইএলে অনুবাদ করা হয়েছে:
IL_0001: ldc.i4.3
IL_0002: stloc.0 // a
IL_0003: ldstr " Hello"
IL_0008: stloc.1 // b
IL_0009: ldloc.0 // a
IL_000A: box System.Int32
IL_000F: ldloc.1 // b
IL_0010: call System.String.Concat
IL_0015: stloc.2 // c
IL_0016: ldloc.2 // c
IL_0017: call System.Console.WriteLine
দেখেন তো System.String.Concat? এর অর্থ হ'ল মূল কোডটিও সেভাবেই লেখা যায়, যা ঠিক একই আইএল অনুবাদ করে:
void Main()
{
var a = 3;
var b = " Hello";
var c = string.Concat(a, b); // This is the line which was changed.
Console.WriteLine(c);
}
আপনি যখন ডকুমেন্টেশনstring.Concat(object[]) পড়েন , আপনি এটি শিখতে পারেন:
পদ্ধতিটি সেই বস্তুর পরামিতি পদ্ধতিতে কল করে প্রতিটি বস্তুকে যুক্তিতে যুক্ত করে ToString; এটি কোনও সীমানা যুক্ত করে না।
এর অর্থ এটি ToStringঅনর্থক। এছাড়াও:
String.Empty অ্যারেতে কোনও নাল বস্তুর জায়গায় ব্যবহার করা হয়।
কোনটি অপারেন্ডগুলি শূন্য হয় এমন ক্ষেত্রে কে সুন্দরভাবে পরিচালনা করে (পাদটীকা 1 দেখুন)।
শেষ উদাহরণে, কনটেটেশনটির অনুবাদ করা হয়েছিল string.Concat, তবে কারওর সংকলন অপ্টিমাইজেশানগুলিও হাইলাইট করা উচিত:
var a = "Hello " + "World";
অনুবাদ করা হয়েছে:
ldstr "Hello World"
stloc.0
অন্য দিকে:
var a = string.Concat("Hello ", "World");
অনুবাদ করা হয়েছে:
ldstr "Hello "
ldstr "World"
call System.String.Concat
stloc.0
অন্যান্য বিকল্প
সি # তে অবজেক্টগুলির স্ট্রিং উপস্থাপনা একত্রিত করার অন্যান্য উপায় অবশ্যই রয়েছে।
StringBuilderযখন আপনাকে প্রচুর পরিমাণে কনটেনটেশন অপারেশন করতে হয় এবং ব্যবহৃত মধ্যস্থতাকারীর স্ট্রিং সংখ্যা হ্রাস করতে সহায়তা করে তখন ব্যবহৃত হয়। আপনার একটি StringBuilderবা একটি সাধারণ কনটেন্টেশন ব্যবহার করা উচিত কিনা তা সিদ্ধান্ত নেওয়া সহজ হতে পারে না। কোনও প্রোফাইলার ব্যবহার করুন বা স্ট্যাক ওভারফ্লোতে প্রাসঙ্গিক উত্তরগুলির জন্য অনুসন্ধান করুন।
StringBuilderকোডটি পড়া এবং বজায় রাখা কঠিন করে দেওয়ার ক্ষেত্রে ব্যবহারের একটি প্রধান ত্রুটি রয়েছে। আপনার প্রশ্নের সদৃশ হিসাবে সাধারণ মামলার ক্ষেত্রে StringBuilderকোডের পাঠযোগ্যতার জন্য কেবল ক্ষতিকারক নয়, পারফরম্যান্সের ক্ষেত্রে এটিও অকেজো।
string.Join আপনার যখন ডিলিমিটার যুক্ত করতে হবে তখন ব্যবহার করা উচিত।
স্পষ্টতই, string.Joinস্ট্রিংগুলি সংযুক্ত করার জন্য কোনও খালি ডিলিমিটার দিয়ে কখনও ব্যবহার করবেন না ।
string.Formatস্ট্রিং টেম্প্লেটিং যখন স্ট্রিং কনকেনটেশনকে প্রাধান্য দেওয়া হয় তখন ব্যবহার করা যেতে পারে। আপনি যে ক্ষেত্রে পছন্দ করতে পারেন তার মধ্যে একটি হ'ল বার্তাটি স্থানীয়করণ করা যেতে পারে, যেমন কুঁথেতে জবাব দেওয়া হয়েছে।
ব্যবহার string.Formatবিভিন্ন অপূর্ণতা তা আপনার মত সহজ ক্ষেত্রে জন্য অনুপযুক্ত করে তোলে আছে:
সাধারণ "{0}" স্থানধারক সহ, এটি প্রায়শই অস্পষ্ট থাকে যে কোন পরামিতিটি যায়। ভুলভাবে প্যারামিটারগুলি বিপরীত করা বা একটি ভুলে যাওয়া ঘন ঘন। ভাগ্যক্রমে, সি # 6 অবশেষে স্ট্রিং ইন্টারপোলেশন প্রবর্তন করে যা এই সমস্যার সমাধান করে।
রানটাইম পারফরম্যান্স হ্রাস পেতে পারে। অবশ্যই, ধরে নিই না string.Formatহয় সবসময় ধীর। যদি পারফরম্যান্সের বিষয়টি গুরুত্বপূর্ণ হয় তবে দুটি পদ্ধতির পরিমাপ করুন এবং অনুমানের পরিবর্তে আপনার প্রকৃত ফলাফলের ভিত্তিতে কোনটি দ্রুত তা নির্ধারণ করুন।
কোডটি লেখার জন্য কিছুটা দীর্ঘতর, পড়ার পক্ষে দীর্ঘতর এবং বজায় রাখা আরও শক্ত, যদিও এটি অত্যন্ত সামান্য এবং আপনাকে খুব বেশি বিরক্ত করা উচিত নয়।
The পার্থক্যটি প্রদর্শিত হয় যখন বস্তুর মধ্যে একটি হয় null। ছাড়া ToString, একটি nullখালি স্ট্রিং দ্বারা প্রতিস্থাপিত হয়। সঙ্গে ToString, একটি NullReferenceExceptionনিক্ষেপ করা হয়।
a + "" + b + ""বা"" + a + b + "", এটা কোন ব্যাপার না: এটা সব স্ট্রিং সংযুক্তকরণের আছে। ইনa + b + ""এটা কোন ব্যাপার:aএবংbপ্রথম যোগ করা হয়।