2012-02-01 12 views
23

मैं अपने नालीबल बूल वैल्यू को कन्वर्ट करने की कोशिश कर रहा हूं और मुझे यह त्रुटि मिल रही है।अंतर्निहित रूप से प्रकार बूल को परिवर्तित नहीं कर सकता?

Cannot implicitly convert type 'bool?' to 'bool'. An explicit conversion exists (are you missing a cast?) 

उदाहरण के लिए:

public virtual bool? MyBool 
    { 
    get; 
    set; 
    } 

if (!MyBool){} 
+2

संक्षेप में, बेकार बूल भ्रमित हैं। (बस एसक्यूएल देखें) – SLaks

+0

मुझे नहीं लगता कि यह बहुत भ्रमित है, यह सिर्फ टर्नरी लॉजिक है: http://en.wikipedia.org/wiki/Three-valued_logic - मुझे वास्तव में यह पसंद है क्योंकि मुझे कुछ की धारणा पसंद है कोई मूल्य नहीं है। दूसरे शब्दों में, प्रारंभिक बनाम प्रारंभिक। – dyslexicanaboko

उत्तर

30

त्रुटि राज्यों के रूप में, आप एक सशर्त में एक bool? उपयोग नहीं कर सकते। (क्या होगा यदि यह null है?)

इसके बजाय, आप if (MyBool != true) या if (MyBool == false) लिख सकते हैं, आप null शामिल करना चाहते हैं, इस पर निर्भर करता है।

हालांकि, अगर आप परीक्षण करना चाहिए है कि यह वास्तव में एक मूल्य के साथ शुरू करने के लिए है:

+5

एक और वैध जांच 'MyBool है ?? झूठा ', हालांकि मैं आम तौर पर' MyBool.GetValueOrDefault() 'पसंद करता हूं। –

+0

@ एंथनी पेगम: हालांकि, इसके लिए निषेध के लिए अतिरिक्त कोष्ठक की आवश्यकता है, और यह भी अधिक भ्रमित है। – SLaks

+0

मैं पहले पर असहमत नहीं हूं, लेकिन मुझे दूसरा उपयोग करने या समझने में मुश्किल नहीं है। आम तौर पर, मुझे प्रत्यक्ष या झूठी सीधी तुलना पसंद नहीं है, हालांकि मैं वास्तव में लिंक-टू-ईएफ क्वेरी में करता हूं क्योंकि विधि समर्थित नहीं है। –

9

उदाहरण के लिए आप MyBool.Value

उपयोग करने के लिए (और आप एक टिप्पणी समझा कि जोड़ना चाहिए) । यह परीक्षण है कि MyBool का मूल्य है और यह गलत है।

if (MyBool.HasValue && !MyBool.Value) { } 

या आप वास्तव में निम्नलिखित कोड चाहते हैं जो कोड ब्लॉक चलाते हैं यदि इसे असाइन नहीं किया गया है या गलत है।

if (!MyBool.HasValue || !MyBool.Value) { } 

सवाल वास्तव में है कि क्या आप वास्तव में यदि ऐसा है तो एक नल बूलियन चर के लिए और, आप कैसे null, true or false के 3 संभव स्थिति को संभालने के लिए चाहते हैं का इरादा करने के लिए निर्भर करता है।

2

आपको यह जांचना होगा कि उसके पास कोई मूल्य है या नहीं। MyBool == null पर आप क्या करना चाहते हैं?

if(MyBool.HasValue && !MyBool.Value) // MyBool is false 
if(MyBool.HasValue && MyBool.Value) // MyBool is true 
if(!MyBool.HasValue) // MyBool is null 
संबंधित मुद्दे

 संबंधित मुद्दे