Risposte:
Alla fine devi decidere cosa rappresenterà il bool nullo. Se null
dovrebbe essere false
, puoi farlo:
bool newBool = x.HasValue ? x.Value : false;
O:
bool newBool = x.HasValue && x.Value;
O:
bool newBool = x ?? false;
Linq
clausola "Where" dell'istruzione, non riuscivo a capire perché lifted operators
non sembrava funzionare all'interno di Linq (forse è solo VB.NET?) - Ho appena testato e genera un'eccezione di lancio non valida
È possibile utilizzare il null coalescenza operator : x ?? something
, dove something
è un valore booleano che si desidera utilizzare, se x
è null
.
Esempio:
bool? myBool = null;
bool newBool = myBool ?? false;
newBool
sarà falso.
bool? myBool = null; bool newBool = myBool ?? false;
Puoi usare il Nullable{T}
GetValueOrDefault()
metodo. Questo restituirà false se null.
bool? nullableBool = null;
bool actualBool = nullableBool.GetValueOrDefault();
if (nullableBool.GetValueOrDefault())
Se hai intenzione di utilizzare bool?
in if
un'istruzione, trovo che la cosa più semplice da fare sia confrontare con true
o 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"; }
Ovviamente puoi anche confrontare con 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.
Se hai intenzione di convertirlo in un bool per passare ad altre parti dell'applicazione, l'operatore Null Coalesce è quello che vuoi.
bool? b = ...;
bool b2 = b ?? true; // null becomes true
b2 = b ?? false; // null becomes false
Se hai già verificato la presenza di null e desideri solo il valore, accedi alla proprietà Value.
bool? b = ...;
if(b == null)
throw new ArgumentNullException();
else
SomeFunc(b.Value);
Il modo più semplice è utilizzare l'operatore di coalescenza null: ??
bool? x = ...;
if (x ?? true) {
}
Con ??
valori nullable funziona esaminando l'espressione nullable fornita. Se l'espressione nullable ha un valore, verrà usato il suo valore altrimenti userà l'espressione a destra di??
Questa risposta è per il caso d'uso in cui si desidera semplicemente testare bool?
in una condizione. Può anche essere usato per ottenere un normale bool
. È un'alternativa che personalmente trovo più facile da leggere rispetto a coalescing operator ??
.
Se vuoi testare una condizione, puoi usarla
bool? nullableBool = someFunction();
if(nullableBool == true)
{
//Do stuff
}
Quanto sopra se sarà vero solo se bool?
è vero.
Puoi anche usarlo per assegnare un normale bool
da un filebool?
bool? nullableBool = someFunction();
bool regularBool = nullableBool == true;
la strega è la stessa di
bool? nullableBool = someFunction();
bool regularBool = nullableBool ?? false;
Questa è una variazione interessante sul tema. Al primo e al secondo sguardo si presume che il vero ramo sia stato preso. Non così!
bool? flag = null;
if (!flag ?? true)
{
// false branch
}
else
{
// true branch
}
Il modo per ottenere quello che vuoi è fare questo:
if (!(flag ?? true))
{
// false branch
}
else
{
// true branch
}
System.Convert funziona bene per me.
using System;
...
Bool fixed = Convert.ToBoolean(NullableBool);
VB.NET
se faidim newBool as Boolean = CBool(x)
:? Verrànull
convertito infalse
o verrà generata un'eccezione?