Yanıtlar:
Null bool'un neyi temsil edeceğine nihayetinde karar vermelisiniz. Eğer nullolmalıdır false, bunu yapabilirsiniz:
bool newBool = x.HasValue ? x.Value : false;
Veya:
bool newBool = x.HasValue && x.Value;
Veya:
bool newBool = x ?? false;
LinqEylem'de' Nerede 'cümlesi için önerildi, neden lifted operatorsLinq içinde çalışmıyor gibi göründüğünü anlayamadım (belki de sadece VB.NET?) - Sadece test ettim ve geçersiz bir cast istisnası
Sen kullanabilirsiniz boş-kaynaştırma operatörü : x ?? something, somethingeğer kullanım istediğiniz bir boole değeri olduğunu xolduğunu null.
Misal:
bool? myBool = null;
bool newBool = myBool ?? false;
newBool yanlış olacak.
bool? myBool = null; bool newBool = myBool ?? false;
Nullable{T} GetValueOrDefault()Yöntemi kullanabilirsiniz . Bu, boşsa yanlış döndürür.
bool? nullableBool = null;
bool actualBool = nullableBool.GetValueOrDefault();
if (nullableBool.GetValueOrDefault())
Kullanmak gidiyoruz bool?bir in ifaçıklamada, yapmam gereken en kolay şey ya karşı karşılaştırmaktır bulmak trueya 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"; }
Elbette null ile de karşılaştırabilirsiniz.
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.
Uygulamanın diğer bölümlerine geçmek için onu bir bool'a dönüştürecekseniz, o zaman Null Coalesce operatörü istediğiniz şeydir.
bool? b = ...;
bool b2 = b ?? true; // null becomes true
b2 = b ?? false; // null becomes false
Zaten boş değeri işaretlediyseniz ve yalnızca değeri istiyorsanız, Değer özelliğine erişin.
bool? b = ...;
if(b == null)
throw new ArgumentNullException();
else
SomeFunc(b.Value);
Bu cevap, sadece bool?bir koşulu test etmek istediğiniz zaman kullanım durumu içindir. Normal almak için de kullanılabilir bool. Şahsen okumayı coalescing operator ??.
Bir koşulu test etmek istiyorsanız, bunu kullanabilirsiniz
bool? nullableBool = someFunction();
if(nullableBool == true)
{
//Do stuff
}
Yukarıdakiler yalnızca bool?doğruysa doğru olacaktır.
Ayrıca düzenli atamak için kullanabilir boola danbool?
bool? nullableBool = someFunction();
bool regularBool = nullableBool == true;
cadı aynıdır
bool? nullableBool = someFunction();
bool regularBool = nullableBool ?? false;
Bu, temanın ilginç bir varyasyonudur. İlk ve ikinci bakışta, gerçek dalın alındığını varsayarsınız. Öyle değil!
bool? flag = null;
if (!flag ?? true)
{
// false branch
}
else
{
// true branch
}
İstediğinizi elde etmenin yolu şunu yapmaktır:
if (!(flag ?? true))
{
// false branch
}
else
{
// true branch
}
System.Convert benim tarafımdan iyi çalışıyor.
using System;
...
Bool fixed = Convert.ToBoolean(NullableBool);
VB.NETbunu yaparsanız:dim newBool as Boolean = CBool(x)? Willnulldönüştürülebilirfalseveya istisna atılır?