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);
C # संकलक अनिवार्य रूप से सबसे विशिष्ट अधिभार लेने की कोशिश करता है जो इनपुट के साथ काम करेगा। एक nullमान किसी भी संदर्भ प्रकार के लिए परिवर्तनीय है। इस मामले stringमें की तुलना में अधिक विशिष्ट है objectऔर इसलिए इसे विजेता के रूप में चुना जाएगा।
में null as objectआप अभिव्यक्ति के प्रकार के रूप में जम गया है object। इसका मतलब यह है कि यह अब stringअधिभार के साथ संगत नहीं है और संकलक objectअधिभार को उठाता है क्योंकि यह एकमात्र संगत शेष है।
इस टाई ब्रेकिंग कार्य के बारे में वास्तव में बालों का विवरण C # भाषा कल्पना के खंड 7.4.3 में शामिल है।
Convert.ToString(string)इसे लागू करने को देखते हैं तो यह केवल एक पहचान समारोह है जबकि Convert.ToString(object)वास्तव में एक कठिन राह से गुजरना है। एक नज़र में मैं सहमत होऊंगा कि उन्हें वही लौटना चाहिए लेकिन बीसीएल की परिवर्तनीय परत ऐसी चीज नहीं है जिस पर मैं बहुत जानकार हूं और यह संभव है कि अंतर के लिए एक अच्छा कारण है (हालांकि मुझे संदेह है)
(string)null, या यदि आपको ऑब्जेक्ट ओ कहा जाता है, तो(string)o
से इसे जारी रखते हुए JaredPar उत्तम अधिभार संकल्प जवाब - प्रश्न बना रहता है "क्यों करता है Convert.ToString(string)वापसी अशक्त, लेकिन Convert.ToString(object)वापसी string.Empty"?
और इसका जवाब है ... क्योंकि डॉक्स ऐसा कहते हैं :
Convert.ToString (स्ट्रिंग) "निर्दिष्ट स्ट्रिंग उदाहरण देता है; कोई वास्तविक रूपांतरण नहीं किया जाता है।"
Convert.ToString (ऑब्जेक्ट) "मान का स्ट्रिंग प्रतिनिधित्व, या String.Empty अगर रिटर्न शून्य है।"
संपादित करें: जैसा कि यह "कल्पना में बग" है, "बहुत खराब एपीआई डिजाइन", "यह इस तरह क्यों निर्दिष्ट किया गया था", आदि - मैं क्यों नहीं देखता इसके लिए कुछ तर्क पर एक शॉट लूंगा यह बड़ी बात है।
System.Convertप्रत्येक आधार प्रकार को स्वयं में परिवर्तित करने की विधियाँ हैं । यह अजीब है - चूंकि किसी भी रूपांतरण की आवश्यकता या संभव नहीं है, इसलिए विधियां केवल पैरामीटर वापस करने के लिए समाप्त होती हैं। Convert.ToString(string)वही व्यवहार करता है। मुझे लगता है कि ये कोड पीढ़ी परिदृश्यों के लिए यहाँ हैं।Convert.ToString(object)पास होने पर 3 विकल्प हैं null। फेंक दें, वापस लौटें, या स्ट्रिंग लौटें। खाली करें। फेंकना बुरा होगा - दोगुना इसलिए कि इस धारणा के साथ उत्पन्न कोड के लिए उपयोग किया जाता है। अशक्त लौटने के लिए आपके कॉलर को एक शून्य जांच करनी होती है - फिर से, उत्पन्न कोड में एक बढ़िया विकल्प नहीं है। रिटर्निंग स्ट्रिंग.इम्प्टी एक उचित विकल्प लगता है। शेष System.Convertप्रकार के मूल्य वाले सौदे - जिनका डिफ़ॉल्ट मान होता है।Convert.ToString(string)अर्थ है "कोई वास्तविक रूपांतरण नहीं" नियम को तोड़ना। चूंकि System.Convertएक स्थिर उपयोगिता वर्ग है, इसलिए प्रत्येक विधि को तार्किक रूप से अपना माना जा सकता है। बहुत कम वास्तविक दुनिया के परिदृश्य हैं जहां यह व्यवहार "आश्चर्यजनक" होना चाहिए, इसलिए प्रयोज्य को (संभव) शुद्धता पर जीत दें।