2010-11-22 20 views
9

संभावित डुप्लिकेट:
Why can't I set a nullable int to null in a ternary if statement?
Nullable types and the ternary operator. Why won't this work?शून्य से शून्य करने के लिए शून्य के साथ गलत क्या है?

नीचे के साथ क्या गलत

public double? Progress { get; set; } 
Progress = null; // works 
Progress = 1; // works 
Progress = (1 == 2) ? 0.0 : null; // fails 

है क्योंकि वहाँ कोई अंतर्निहित सशर्त अभिव्यक्ति का प्रकार निर्धारित नहीं किया जा सकता है के बीच रूपांतरण 'डबल' और '< अशक्त>'

+0

http://stackoverflow.com/questions/2766932/why-cant-i-set-a-nullable-int-to-null-in- dup में 0.0 है ए-टर्नरी-अगर-स्टेटमेंट – pavanred

उत्तर

18

का उपयोग करते समय: ऑपरेटर, यह एक ही प्रकार के लिए हल करने के लिए है, या प्रकार उन दोनों के बीच एक अंतर्निहित रूपांतरण है। आपके मामले में, यह या तो double या null लौटाएगा, और डबल के पास null पर अंतर्निहित रूपांतरण नहीं होगा।

कि

Progress = (1 == 2) ? (double?)0.0 : null; 

ठीक काम करता है आप देखेंगे वहाँ के बाद से है nullable double और null

-2

0.0 के बीच एक अंतर्निहित रूपांतरण, एक float शाब्दिक है, जो गैर-व्यर्थ है, जबकि null केवल कर सकते हैं निरर्थक प्रकार के चर के लिए असाइन किया जाना चाहिए।

द्विआधारी ऑपरेटर?: विकल्पों के समान प्रकार के 2 मान होने चाहिए।

+5

नहीं, सशर्त ऑपरेटर के पास एक परिणाम और वैकल्पिक मूल्य होना चाहिए जैसे कि उनके * अभिव्यक्ति * एक * अद्वितीय सामान्य प्रकार * में परिवर्तनीय हैं और उस प्रकार का * कम से कम एक * का प्रकार है भाव। अभिव्यक्तियों को एक ही प्रकार का होना जरूरी नहीं है; चूंकि "नल" में एक प्रकार भी नहीं है, इसलिए यदि आप इसका वर्णन करते हैं तो हमने कभी भी सशर्त अभिव्यक्ति में शून्य का उपयोग करना असंभव होगा। –

+1

और 0.0 एक * डबल * शाब्दिक है। 0.0 पूर्णांक के लिए डबल, 0 पर जाता है। आप एक फ्लोट चाहते हैं, यह '0.0f' है। –

0

डबल इस मामले

Progress = (1 == 2) ? (double?)0.0 : null; // works 
संबंधित मुद्दे