Odpowiedzi:
Ostatecznie musisz zdecydować, co będzie reprezentować null bool. Jeśli null
tak false
, możesz to zrobić:
bool newBool = x.HasValue ? x.Value : false;
Lub:
bool newBool = x.HasValue && x.Value;
Lub:
bool newBool = x ?? false;
Linq
klauzuli lifted operators
`` Gdzie '', nie mogłem zrozumieć, dlaczego nie wydaje się działać w Linq (może to tylko VB.NET?) - Właśnie przetestowałem i rzuca nieprawidłowy wyjątek rzucany
Można użyć null zlewających operatora : x ?? something
, gdzie something
jest wartością logiczną, który chcesz użyć, jeżeli x
jest null
.
Przykład:
bool? myBool = null;
bool newBool = myBool ?? false;
newBool
będzie fałszywa.
bool? myBool = null; bool newBool = myBool ?? false;
Możesz użyć Nullable{T}
GetValueOrDefault()
metody. To zwróci false, jeśli null.
bool? nullableBool = null;
bool actualBool = nullableBool.GetValueOrDefault();
if (nullableBool.GetValueOrDefault())
Jeśli masz zamiar użyć bool?
w if
oświadczeniu, wydaje mi się, że najłatwiej jest porównać je z albo true
albo 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"; }
Oczywiście możesz również porównać z 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.
Jeśli zamierzasz przekonwertować go na bool, aby przekazać go do innych części aplikacji, to operator Null Coalesce jest tym, czego potrzebujesz.
bool? b = ...;
bool b2 = b ?? true; // null becomes true
b2 = b ?? false; // null becomes false
Jeśli już sprawdziłeś, czy nie ma wartości null, i chcesz tylko uzyskać wartość, uzyskaj dostęp do właściwości Value.
bool? b = ...;
if(b == null)
throw new ArgumentNullException();
else
SomeFunc(b.Value);
Najłatwiejszym sposobem jest użycie operatora koalescencji zerowej: ??
bool? x = ...;
if (x ?? true) {
}
Z ??
wartościami dopuszczającymi wartość null działa, sprawdzając podane wyrażenie dopuszczające wartość null. Jeśli wyrażenie dopuszczające wartość null ma wartość, zostanie użyta jego wartość, w przeciwnym razie użyje wyrażenia po prawej stronie??
Ta odpowiedź dotyczy przypadku użycia, gdy chcesz po prostu przetestować bool?
stan w. Można go również użyć, aby uzyskać normalny bool
. Jest to alternatywa, którą osobiście uważam za łatwiejszą do odczytania niżcoalescing operator ??
.
Jeśli chcesz przetestować stan, możesz użyć tego
bool? nullableBool = someFunction();
if(nullableBool == true)
{
//Do stuff
}
Powyższe if będzie prawdziwe tylko wtedy, gdy bool?
jest prawdziwe.
Możesz również użyć tego do przypisania regularnego bool
zbool?
bool? nullableBool = someFunction();
bool regularBool = nullableBool == true;
wiedźma jest taka sama jak
bool? nullableBool = someFunction();
bool regularBool = nullableBool ?? false;
To ciekawa wariacja na ten temat. Na pierwszy i drugi rzut oka można założyć, że prawdziwa gałąź jest zajęta. Skąd!
bool? flag = null;
if (!flag ?? true)
{
// false branch
}
else
{
// true branch
}
Aby uzyskać to, czego chcesz, wykonaj następujące czynności:
if (!(flag ?? true))
{
// false branch
}
else
{
// true branch
}
System.Convert działa dobrze według mnie.
using System;
...
Bool fixed = Convert.ToBoolean(NullableBool);
VB.NET
razie zrobić:dim newBool as Boolean = CBool(x)
? Zostanienull
przekonwertowany nafalse
lub zostanie zgłoszony wyjątek?