जवाबों:
आपको अंततः यह तय करना होगा कि अशक्त बूल क्या प्रतिनिधित्व करेगा। यदि null
होना चाहिए false
, तो आप यह कर सकते हैं:
bool newBool = x.HasValue ? x.Value : false;
या:
bool newBool = x.HasValue && x.Value;
या:
bool newBool = x ?? false;
Linq
स्टेटमेंट 'व्हेयर' क्लॉज़ के लिए सुझाया गया था , मैं समझ नहीं पाया कि lifted operators
लिनक के अंदर काम क्यों नहीं किया (शायद यह सिर्फ VB.NET है?) - मैंने अभी-अभी परीक्षण किया है? यह एक अमान्य कास्ट अपवाद को फेंक देता है
आप उपयोग कर सकते हैं अशक्त-वालों ऑपरेटर : x ?? something
, जहां something
एक बूलियन मान है कि आप उपयोग करना चाहते हैं है x
है null
।
उदाहरण:
bool? myBool = null;
bool newBool = myBool ?? false;
newBool
झूठा होगा।
bool? myBool = null; bool newBool = myBool ?? false;
आप Nullable{T}
GetValueOrDefault()
विधि का उपयोग कर सकते हैं । यह अशक्त हो जाने पर वापस लौट आएगा।
bool? nullableBool = null;
bool actualBool = nullableBool.GetValueOrDefault();
if (nullableBool.GetValueOrDefault())
यदि आप 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);
सबसे आसान तरीका यह है कि अशक्त सहकर्मी ऑपरेटर का उपयोग करें: ??
bool? x = ...;
if (x ?? true) {
}
??
नल मूल्यों के साथ प्रदान की व्यर्थ अभिव्यक्ति का परीक्षण करके काम करता है। यदि अशक्त अभिव्यक्ति का मान है, तो इसका उपयोग उस मूल्य के लिए किया जाएगा जो इसके अभिव्यक्ति के दाईं ओर उपयोग करेगा??
यह उत्तर उपयोग के मामले के लिए है जब आप बस 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;
यह विषय पर एक दिलचस्प बदलाव है। पहली और दूसरी झलक में आप मान लेंगे कि सच्ची शाखा ली गई है। ऐसा नहीं!
bool? flag = null;
if (!flag ?? true)
{
// false branch
}
else
{
// true branch
}
ऐसा करने का तरीका जो आप चाहते हैं वह यह है:
if (!(flag ?? true))
{
// false branch
}
else
{
// true branch
}
System.Convert मेरे द्वारा ठीक काम करता है।
using System;
...
Bool fixed = Convert.ToBoolean(NullableBool);
VB.NET
यदि आप कार्य करें:dim newBool as Boolean = CBool(x)
? विलnull
के लिए परिवर्तित किया जाfalse
या एक अपवाद फेंक दिया जाएगा?