Convert.ToString(null)
আয়
null
আমি যেমন আশা করছিলাম.
কিন্তু
Convert.ToString(null as object)
আয়
""
এগুলি আলাদা কেন?
Convert.ToString(null)
আয়
null
আমি যেমন আশা করছিলাম.
কিন্তু
Convert.ToString(null as object)
আয়
""
এগুলি আলাদা কেন?
উত্তর:
এখানে 2 টি ওভারলোড ToStringখেলতে আসে
Convert.ToString(object o);
Convert.ToString(string s);
সি # সংকলক মূলত সর্বাধিক নির্দিষ্ট ওভারলোড বাছাই করার চেষ্টা করে যা ইনপুটটির সাথে কাজ করবে। একটি nullমান যে কোনও রেফারেন্স ধরণের রূপান্তরিত হয়। এই ক্ষেত্রে stringচেয়ে বেশি সুনির্দিষ্ট objectএবং তাই এটা বিজয়ী হিসাবে বাছাই করা হবে।
মধ্যে null as objectআপনি মত প্রকাশের ধরণ দৃ solid় করেছেন object। এর অর্থ এটি আর stringওভারলোডের সাথে আর সুসংগত নয় এবং সংকলক ওভারলোডটিকে বেছে নেয় objectকারণ এটি কেবলমাত্র একমাত্র উপযুক্ত।
এই টাই ব্রেকিং কীভাবে কাজ করে তার সত্যিকারের লোমশ বিবরণগুলি সি # ল্যাঙ্গুয়েজ অনুচ্ছেদের 7.4.3 বিভাগে আচ্ছাদিত।
Convert.ToString(string)এটি কেবল একটি পরিচয়ের ফাংশন এবং Convert.ToString(object)সত্যিকারের পথ অনুসরণ করা আরও কঠিন হয়ে উঠছে । এক নজরে আমি সম্মতি জানাই তাদের একই ফিরতে হবে তবে ছাত্রলীগের রূপান্তরিত স্তর এমন কিছু নয় যা আমি খুব
(string)null, বা যদি আপনাকে আপত্তি জানায় তবে তাকে বলা হয়(string)o
জারেডপাড়ের দুর্দান্ত ওভারলোড রেজোলিউশন উত্তরটি অনুসরণ করে - প্রশ্নটি "কেন Convert.ToString(string)নাল ফিরে আসে , তবে Convert.ToString(object)ফিরে আসে string.Empty"?
এবং যে উত্তর ... কারন ডক্স বলে তাই :
রূপান্তর। টোস্ট্রিং (স্ট্রিং) "নির্দিষ্ট স্ট্রিং ইনস্ট্যান্স প্রদান করে; কোনও প্রকৃত রূপান্তর সম্পাদন হয় না।"
রূপান্তর। টুস্ট্রিং (অবজেক্ট) "মানের স্ট্রিং উপস্থাপনা, বা স্ট্রিং .Empty প্রদান করে যদি মানটি নাল হয়।"
সম্পাদনা: এটি একটি "স্পেকের বাগ", "খুব খারাপ এপিআই নকশা", "কেন এটি এর মতো নির্দিষ্ট করা হয়েছিল" ইত্যাদি ইত্যাদি - কেন আমি দেখছি না তার জন্য আমি কিছু যুক্তি দেখিয়ে বলব এটা বড় ব্যাপার হিসাবে।
System.Convertপ্রতিটি বেস টাইপকে নিজের মধ্যে রূপান্তর করার জন্য পদ্ধতি রয়েছে । এটি আশ্চর্যজনক - যেহেতু কোনও রূপান্তর প্রয়োজন হয় না বা সম্ভব হয় না, সুতরাং পদ্ধতিগুলি কেবলমাত্র প্যারামিটারটি ফিরে আসে। Convert.ToString(string)একই আচরণ করে আমি ধারণা করি কোড উত্পন্ন পরিস্থিতিতে জন্য এগুলি এখানে রয়েছে।Convert.ToString(object)পাস করার পরে 3 টি পছন্দ রয়েছে null। নিক্ষেপ করুন, নাল করুন, বা ফিরুন স্ট্রিং E নিক্ষেপ করা খারাপ হবে - দ্বিগুণ তাই ধারনা সহ এগুলি উত্পন্ন কোডের জন্য ব্যবহৃত হয়। নাল ফিরে আসার জন্য আপনার কলার একটি নাল চেক করা দরকার - আবার, উত্পন্ন কোডে দুর্দান্ত পছন্দ নয়। রিটার্নিং স্ট্রিং.এম্পটি একটি যুক্তিসঙ্গত পছন্দ বলে মনে হচ্ছে। System.Convertমানের ধরণের সাথে বাকী ডিলগুলি - যার একটি ডিফল্ট মান থাকে।Convert.ToString(string)মানে "সত্যিকারের রূপান্তর নয়" নিয়ম ভঙ্গ করা। যেহেতু System.Convertএকটি স্ট্যাটিক ইউটিলিটি ক্লাস, তাই প্রতিটি পদ্ধতিটি যৌক্তিকভাবে তার নিজস্ব হিসাবে বিবেচনা করা যেতে পারে। খুব অল্প বাস্তব বাস্তব পরিস্থিতি রয়েছে যেখানে এই আচরণটি "আশ্চর্যজনক" হওয়া উচিত, সুতরাং ব্যবহারের যোগ্যতাটি (সম্ভাব্য) যথার্থতার উপরে জয়যুক্ত হোক।