Respuestas:
En última instancia, debe decidir qué representará el bool nulo. Si null
es así false
, puede hacer esto:
bool newBool = x.HasValue ? x.Value : false;
O:
bool newBool = x.HasValue && x.Value;
O:
bool newBool = x ?? false;
Linq
cláusula de declaración 'Dónde', no pude entender por qué lifted operators
no parecía funcionar dentro de Linq (¿tal vez sea solo VB.NET?) - Acabo de probar y arroja una excepción de lanzamiento no válida
Puede usar el operador de fusión nula :, x ?? something
donde something
es un valor booleano que desea usar si x
es null
.
Ejemplo:
bool? myBool = null;
bool newBool = myBool ?? false;
newBool
será falso.
bool? myBool = null; bool newBool = myBool ?? false;
Puedes usar el Nullable{T}
GetValueOrDefault()
método. Esto devolverá falso si es nulo.
bool? nullableBool = null;
bool actualBool = nullableBool.GetValueOrDefault();
if (nullableBool.GetValueOrDefault())
Si va a utilizar el bool?
en una if
declaración, creo que lo más fácil de hacer es comparar 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"; }
Por supuesto, también puede comparar 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.
Si va a convertirlo en un bool para pasarlo a otras partes de la aplicación, entonces el operador Null Coalesce es lo que desea.
bool? b = ...;
bool b2 = b ?? true; // null becomes true
b2 = b ?? false; // null becomes false
Si ya ha verificado el valor nulo y solo desea el valor, acceda a la propiedad Valor.
bool? b = ...;
if(b == null)
throw new ArgumentNullException();
else
SomeFunc(b.Value);
La forma más sencilla es utilizar el operador de fusión nula: ??
bool? x = ...;
if (x ?? true) {
}
Los ??
valores que aceptan valores NULL funcionan examinando la expresión que admite valores NULL proporcionada. Si la expresión que acepta valores NULL tiene un valor, se usará su valor; de lo contrario, usará la expresión a la derecha de??
Esta respuesta es para el caso de uso cuando simplemente desea probar el bool?
en una condición. También se puede usar para obtener una normalidad bool
. Es una alternativa que personalmente encuentro más fácil de leer que el coalescing operator ??
.
Si desea probar una condición, puede usar este
bool? nullableBool = someFunction();
if(nullableBool == true)
{
//Do stuff
}
Lo anterior if será cierto solo si el bool?
es verdadero.
También puede usar esto para asignar un regular bool
de unbool?
bool? nullableBool = someFunction();
bool regularBool = nullableBool == true;
bruja es lo mismo que
bool? nullableBool = someFunction();
bool regularBool = nullableBool ?? false;
Ésta es una variación interesante del tema. A primera y segunda mirada, asumiría que se ha tomado la verdadera rama. ¡No tan!
bool? flag = null;
if (!flag ?? true)
{
// false branch
}
else
{
// true branch
}
La forma de obtener lo que desea es hacer esto:
if (!(flag ?? true))
{
// false branch
}
else
{
// true branch
}
System.Convert funciona bien para mí.
using System;
...
Bool fixed = Convert.ToBoolean(NullableBool);
VB.NET
si lo hacesdim newBool as Boolean = CBool(x)
? ¿null
Se convertirá enfalse
o se lanzará una excepción?