इस चर्चा सूत्र में किसी ने कहा कि आप कुछ भी नहीं कर सकते हैं।
(जो मुझे लगता है कि एक अच्छा वाक्यांश है)। लेकिन हाँ - आप :-), जैसा कि निम्नलिखित उदाहरण से पता चलता है:
var x = null + (string)null;
var wtf = x.ToString();
ठीक काम करता है और एक अपवाद बिल्कुल नहीं फेंकता है। अंतर केवल इतना है कि आपको एक नल को स्ट्रिंग में डालने की आवश्यकता है - यदि आप (स्ट्रिंग) कास्ट निकालते हैं , तो उदाहरण अभी भी संकलित करता है, लेकिन एक रन-टाइम अपवाद को फेंकता है: "ऑपरेटर '+ ऑपरेंड पर अस्पष्ट है '<null>' और '<null>' टाइप करें।
NB ऊपर दिए गए कोड उदाहरण में, x का मान शून्य नहीं है जैसा कि आप उम्मीद कर सकते हैं, यह वास्तव में एक स्ट्रिंग को एक स्ट्रिंग में डालने के बाद एक खाली स्ट्रिंग है।
एक और दिलचस्प तथ्य यह है कि C # / .NET में में जिस तरह null
से व्यवहार किया जाता है वह हमेशा समान नहीं होता है यदि आप विभिन्न डेटा प्रकारों का संबंध रखते हैं। उदाहरण के लिए:
int? x = 1; // string x = "1";
x = x + null + null;
Console.WriteLine((x==null) ? "<null>" : x.ToString());
कोड स्निपेट की पहली पंक्ति के बारे में: यदि x
एक अशक्त पूर्णांक चर (यानी int?
) मान है 1
, तो आप परिणाम प्राप्त कर रहे हैं<null>
वापस । यदि यह मान के साथ एक स्ट्रिंग (जैसा कि टिप्पणी में दिखाया गया है) है "1"
, तो आप "1"
इसके बजाय वापस आ रहे हैं <null>
।
एनबी भी दिलचस्प: यदि आप var x = 1;
पहली पंक्ति के लिए उपयोग कर रहे हैं , तो आपको एक रनटाइम त्रुटि मिल रही है। क्यों? क्योंकि असाइनमेंट चर x
को डेटाटाइप में बदल देगा int
, जो कि अशक्त नहीं है। कंपाइलर int?
यहां नहीं मानता है, और इसलिए दूसरी पंक्ति में विफल रहता है जहां null
जोड़ा जाता है।
null.ToString()
नाम दिया गया हैwtf
। क्यों आपको आश्चर्य होता है? जब आप इसके पास पहली जगह से कॉल करने के लिए कुछ नहीं है तो आप एक इंस्टेंस विधि नहीं कह सकते।