2011-05-20 13 views
71

आप सी # में एक शून्य से bool?bool कैसे परिवर्तित करते हैं?नलिका बूल कनवर्ट करें? बूल करने के लिए

मैं x.Value या x.HasValue की कोशिश की है ...

+17

के रूप में ही इसे +1 करता है, तो शीर्षक था "सी # कैसे bool कन्वर्ट करने के लिए है जाएगा बूल करने के लिए ?? " – bevacqua

उत्तर

93

का उपयोग कर आप अंततः है क्या अशक्त तय करने के लिए विशिष्ट मानों के लिए परीक्षण कर सकते हैं बूल का प्रतिनिधित्व करेगा। यदि nullfalse होना चाहिए, आप ऐसा कर सकते हैं:

bool newBool = x.HasValue ? x.Value : false; 

या:

bool newBool = x.HasValue && x.Value; 

या:

bool newBool = x ?? false; 
+0

यदि आप करते हैं तो' VB.NET' में क्या होता है: 'बूलेन = सीबीूल (x)' के रूप में नया नया बूल? 'शून्य' को 'झूठी' में परिवर्तित किया जाएगा या अपवाद फेंक दिया जाएगा? –

+0

क्या यह संकलन भी करता है? –

+0

हां यह करता है - यह 'लिंक' कथन 'कहां' खंड के लिए 'त्वरित कार्रवाई' में सुझाया गया था, मुझे समझ में नहीं आया कि लिनक के अंदर 'उठाए गए ऑपरेटर' क्यों काम नहीं कर रहे थे (शायद यह सिर्फ वीबी.नेट है ?) - मैंने अभी परीक्षण किया है और यह एक अवैध कास्ट अपवाद फेंक देता है –

84

आप उपयोग कर सकते हैं null-coalescing operator: x ?? something, जहां something एक बूलियन मान है कि आप अगर xnull है का उपयोग करना चाहते है।

उदाहरण:

bool? myBool = null; 
bool newBool = myBool ?? false; 

newBool झूठी हो जाएगा।

+1

तो, 'बूल? myBool = शून्य; बूल न्यूबूल = मायबूल ?? झूठा; ' – CaffGeek

2

पूरा तरीका होगा:

bool b1; 
bool? b2 = ???; 
if (b2.HasValue) 
    b1 = b2.Value; 

या आप

bool b3 = (b2 == true); // b2 is true, not false or null 
4

सबसे आसान तरीका है अशक्त कोलेसिंग ऑपरेटर का उपयोग करने के लिए है: ??

bool? x = ...; 
if (x ?? true) { 

} 

?? निरर्थक मानों के साथ प्रदान की गई शून्य अभिव्यक्ति की जांच करके काम करता है। यह ??

61

के दाईं तरफ एक्सप्रेशन का उपयोग करेंगे नल अभिव्यक्ति एक मूल्य यह मूल्य किसी और का उपयोग किया जाएगा है, तो आप Nullable{T}GetValueOrDefault() विधि का उपयोग कर सकते हैं। अगर शून्य हो तो यह झूठी वापसी होगी।

bool? nullableBool = null; 

bool actualBool = nullableBool.GetValueOrDefault(); 
+4

मुझे लगता है कि यह समेकन और सी # नोब-मित्रता के बीच सबसे अच्छा संकर है। यह भी ध्यान रखें कि एक अधिभार है जहां आप डिफ़ॉल्ट मान निर्दिष्ट कर सकते हैं। – Phil

+1

मुझे इस विधि का उपयोग करना पसंद है, क्योंकि अगर 'स्टेटमेंट' बना सकते हैं तो बयान 'अगर (nullableBool.GetValueOrDefault()) ' –

3

आप एक if बयान में bool? उपयोग करने के लिए जा रहे हैं, मुझे लगता है ऐसा करने के लिए सबसे आसान काम या तो true या false के खिलाफ तुलना करने के लिए है।

bool? b = ...; 

if (b == true) { Debug.WriteLine("true"; } 
if (b == false) { Debug.WriteLine("false"; } 
if (b != true) { Debug.WriteLine("false or null"; } 
if (b != false) { Debug.WriteLine("true or null"; } 

बेशक, आप भी नल के खिलाफ तुलना कर सकते हैं।

bool? b = ...; 

if (b == null) { Debug.WriteLine("null"; } 
if (b != null) { Debug.WriteLine("true or false"; } 
if (b.HasValue) { Debug.WriteLine("true or false"; } 
//HasValue and != null will ALWAYS return the same value, so use whatever you like. 

आप इसे एक bool कन्वर्ट करने के लिए आवेदन के अन्य भागों में पर पारित करने के लिए जा रहे हैं, तो अशक्त संगठित होना ऑपरेटर आप क्या चाहते है।

bool? b = ...; 
bool b2 = b ?? true; // null becomes true 
b2 = b ?? false; // null becomes false 

यदि आप पहले से ही शून्य के लिए चेक कर चुके हैं, और आप केवल मान चाहते हैं, तो वैल्यू प्रॉपर्टी एक्सेस करें।

bool? b = ...; 
if(b == null) 
    throw new ArgumentNullException(); 
else 
    SomeFunc(b.Value); 
0

यह थीम पर एक दिलचस्प भिन्नता है। पहली और दूसरी नज़र में आप मान लेंगे कि असली शाखा ली गई है। ऐसा नहीं!

bool? flag = null; 
if (!flag ?? true) 
{ 
    // false branch 
} 
else 
{ 
    // true branch 
} 

जिस तरह से आप क्या चाहते हैं पाने के लिए यह करने के लिए है:

if (!(flag ?? true)) 
{ 
    // false branch 
} 
else 
{ 
    // true branch 
} 
1

इस उत्तर उपयोग स्थिति के लिए है जब आप बस एक हालत में bool? परीक्षण करना चाहते हैं। इसका उपयोग सामान्य bool प्राप्त करने के लिए भी किया जा सकता है। यह एक वैकल्पिक I personnaly है coalescing operator ?? से पढ़ने के लिए आसान लगता है।

आप एक शर्त परीक्षण करना चाहते हैं, तो आप इस

bool? nullableBool = someFunction(); 
if(nullableBool == true) 
{ 
    //Do stuff 
} 

ऊपर उपयोग कर सकते हैं सच ही अगर bool? सच है किया जाएगा।

आप भी इस का उपयोग कर सकते एक bool?

bool? nullableBool = someFunction(); 
bool regularBool = nullableBool == true; 

डायन से एक नियमित रूप से bool आवंटित करने के लिए

bool? nullableBool = someFunction(); 
bool regularBool = nullableBool ?? false; 
संबंधित मुद्दे