अशक्त बूल परिवर्तित करें? to bool


122

आप कैसे एक नल परिवर्तित bool?करने के लिए boolसी # में?

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

जवाबों:


200

आपको अंततः यह तय करना होगा कि अशक्त बूल क्या प्रतिनिधित्व करेगा। यदि nullहोना चाहिए false, तो आप यह कर सकते हैं:

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

या:

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

या:

bool newBool = x ?? false;

के बारे में क्या में VB.NETयदि आप कार्य करें: dim newBool as Boolean = CBool(x)? विल nullके लिए परिवर्तित किया जा falseया एक अपवाद फेंक दिया जाएगा?
ल्यूक टी ओ'ब्रायन

क्या वह भी संकलन करता है?
केन पेसिसा

हाँ यह करता है - यह एक 'क्विक एक्शन' में एक Linqस्टेटमेंट 'व्हेयर' क्लॉज़ के लिए सुझाया गया था , मैं समझ नहीं पाया कि lifted operatorsलिनक के अंदर काम क्यों नहीं किया (शायद यह सिर्फ VB.NET है?) - मैंने अभी-अभी परीक्षण किया है? यह एक अमान्य कास्ट अपवाद को फेंक देता है
ल्यूक टी ओ'ब्रायन

पसंद है! :) धन्यवाद!
प्रागुण

या: बूल newBool ​​= x == सच;
निक वेस्टगेट

104

आप उपयोग कर सकते हैं अशक्त-वालों ऑपरेटर : x ?? something, जहां somethingएक बूलियन मान है कि आप उपयोग करना चाहते हैं है xहै null

उदाहरण:

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

newBool झूठा होगा।


1
तो,bool? myBool = null; bool newBool = myBool ?? false;
कैफीक

86

आप Nullable{T} GetValueOrDefault()विधि का उपयोग कर सकते हैं । यह अशक्त हो जाने पर वापस लौट आएगा।

 bool? nullableBool = null;

 bool actualBool = nullableBool.GetValueOrDefault();

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

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

9

यदि आप bool?एक ifबयान में उपयोग करने जा रहे हैं , तो मुझे लगता है कि सबसे आसान बात यह है कि 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? 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);

5

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

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

}

??नल मूल्यों के साथ प्रदान की व्यर्थ अभिव्यक्ति का परीक्षण करके काम करता है। यदि अशक्त अभिव्यक्ति का मान है, तो इसका उपयोग उस मूल्य के लिए किया जाएगा जो इसके अभिव्यक्ति के दाईं ओर उपयोग करेगा??



2

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

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

या आप विशिष्ट मानों का उपयोग करके परीक्षण कर सकते हैं

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


2

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

यदि आप किसी शर्त का परीक्षण करना चाहते हैं, तो आप इसका उपयोग कर सकते हैं

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

ऊपर अगर सच है तो ही bool?सही।

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

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

चुड़ैल के रूप में ही है

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

0

यह विषय पर एक दिलचस्प बदलाव है। पहली और दूसरी झलक में आप मान लेंगे कि सच्ची शाखा ली गई है। ऐसा नहीं!

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

ऐसा करने का तरीका जो आप चाहते हैं वह यह है:

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.