2012-10-03 24 views
19

सी # में, यदि मैं लिखने+ = सी # में नल प्रकार के साथ ऑपरेटर

int? x = null; 
x += x ?? 1 

मैं इस के बराबर होने की अपेक्षा करेंगे दूसरे उदाहरण में 1 शामिल हैं। लेकिन ऐसा नहीं है, इसमें शून्य है। + = ऑपरेटर को शून्य प्रकारों पर काम नहीं लगता है जब उन्हें असाइन नहीं किया गया है। यह मामला क्यों होना चाहिए?

संपादित करें: जैसा कि बताया गया है, ऐसा इसलिए है क्योंकि null + 1 = null और ऑपरेटर प्राथमिकता है। मेरे बचाव में, मुझे लगता है कि MSDN में इस लाइन अस्पष्ट है !:

पूर्वनिर्धारित एकल और द्विआधारी ऑपरेटरों और किसी भी उपयोगकर्ता परिभाषित ऑपरेटरों कि मूल्य प्रकार के लिए मौजूद हैं भी नल प्रकार के द्वारा प्रयोग किया जा सकता है। [0] ऑपरेंड शून्य हैं, तो ये ऑपरेटर शून्य मान का उत्पादन करते हैं; अन्यथा, ऑपरेटर पर निहित मान का उपयोग परिणाम की गणना करता है।

x += x ?? 1 
x = (x + x) ?? 1 

दूसरा नहीं है कि तुम क्या उम्मीद कर रहे थे:

उत्तर

33

यहाँ दो बयानों के बीच अंतर है।

x += x ?? 1 
x += null ?? 1 
x += 1 
x = x + 1 
x = null + 1 
x = null 

x = x + x ?? 1 
x = null + null ?? 1 
x = null ?? 1 
x = 1 
+7

+1 आह, ऑपरेटर पूर्वता, मेरे प्राचीन दुश्मन:

यहाँ उन दोनों के टूटने है। आप फिर से हड़ताल! – JDB

+0

'' '' '' '' '' '' 'की प्राथमिकता नहीं है? (@ Servy का जवाब) –

+4

@AustinSalonen नहीं। http://msdn.microsoft.com/en-us/library/6a71f45d.aspx –