Antworten:
Sie müssen letztendlich entscheiden, was der Null-Bool darstellen soll. Wenn null
sollte es sein false
, können Sie dies tun:
bool newBool = x.HasValue ? x.Value : false;
Oder:
bool newBool = x.HasValue && x.Value;
Oder:
bool newBool = x ?? false;
Linq
Anweisung 'Where'-Klausel vorgeschlagen. Ich konnte nicht verstehen, warum lifted operators
es in Linq nicht zu funktionieren schien (vielleicht ist es nur VB.NET?). Ich habe es gerade getestet und es wirft eine ungültige Besetzungsausnahme
Sie können den Null-Koaleszenz-Operator verwenden : x ?? something
, wobei something
ein boolescher Wert ist, den Sie verwenden möchten, wenn x
is null
.
Beispiel:
bool? myBool = null;
bool newBool = myBool ?? false;
newBool
wird falsch sein.
bool? myBool = null; bool newBool = myBool ?? false;
Sie können Nullable{T}
GetValueOrDefault()
Methode verwenden. Dies gibt false zurück, wenn null.
bool? nullableBool = null;
bool actualBool = nullableBool.GetValueOrDefault();
if (nullableBool.GetValueOrDefault())
Wenn Sie das bool?
in einer if
Anweisung verwenden, ist es für mich am einfachsten, es mit entweder true
oder zu vergleichen 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"; }
Natürlich können Sie auch mit Null vergleichen.
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.
Wenn Sie es in einen Bool konvertieren, um es an andere Teile der Anwendung weiterzuleiten, ist der Null Coalesce-Operator genau das, was Sie wollen.
bool? b = ...;
bool b2 = b ?? true; // null becomes true
b2 = b ?? false; // null becomes false
Wenn Sie bereits auf null geprüft haben und nur den Wert möchten, greifen Sie auf die Value-Eigenschaft zu.
bool? b = ...;
if(b == null)
throw new ArgumentNullException();
else
SomeFunc(b.Value);
Am einfachsten ist es, den Null-Koaleszenz-Operator zu verwenden: ??
bool? x = ...;
if (x ?? true) {
}
Das ??
mit nullbaren Werten funktioniert, indem der bereitgestellte nullbare Ausdruck untersucht wird. Wenn der nullfähige Ausdruck einen Wert hat, wird sein Wert verwendet, andernfalls wird der Ausdruck rechts von verwendet??
Diese Antwort ist für den Anwendungsfall gedacht, wenn Sie das einfach bool?
in einem Zustand testen möchten . Es kann auch verwendet werden, um eine normale zu bekommen bool
. Es ist eine Alternative, die ich persönlich leichter zu lesen finde als die coalescing operator ??
.
Wenn Sie eine Bedingung testen möchten, können Sie diese verwenden
bool? nullableBool = someFunction();
if(nullableBool == true)
{
//Do stuff
}
Das obige Wenn wird nur wahr sein, wenn das bool?
wahr ist.
Sie können dies auch verwenden, um eine reguläre bool
von a zuzuweisenbool?
bool? nullableBool = someFunction();
bool regularBool = nullableBool == true;
Hexe ist das gleiche wie
bool? nullableBool = someFunction();
bool regularBool = nullableBool ?? false;
Dies ist eine interessante Variation des Themas. Auf den ersten und zweiten Blick würden Sie annehmen, dass der wahre Zweig genommen wird. Nicht so!
bool? flag = null;
if (!flag ?? true)
{
// false branch
}
else
{
// true branch
}
Der Weg, um das zu bekommen, was Sie wollen, ist folgender:
if (!(flag ?? true))
{
// false branch
}
else
{
// true branch
}
System.Convert funktioniert gut von mir.
using System;
...
Bool fixed = Convert.ToBoolean(NullableBool);
VB.NET
wenn Sie tun :dim newBool as Boolean = CBool(x)
? Wirdnull
konvertiertfalse
oder wird eine Ausnahme ausgelöst?