Yanıtlar:
Null bool'un neyi temsil edeceğine nihayetinde karar vermelisiniz. Eğer null
olmalıdır false
, bunu yapabilirsiniz:
bool newBool = x.HasValue ? x.Value : false;
Veya:
bool newBool = x.HasValue && x.Value;
Veya:
bool newBool = x ?? false;
Linq
Eylem'de' Nerede 'cümlesi için önerildi, neden lifted operators
Linq 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
, something
eğer kullanım istediğiniz bir boole değeri olduğunu x
olduğ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 if
açıklamada, yapmam gereken en kolay şey ya karşı karşılaştırmaktır bulmak true
ya 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 bool
a 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.NET
bunu yaparsanız:dim newBool as Boolean = CBool(x)
? Willnull
dönüştürülebilirfalse
veya istisna atılır?