Respostas:
Você precisa decidir o que o bool nulo representará. Se null
for false
, você pode fazer isso:
bool newBool = x.HasValue ? x.Value : false;
Ou:
bool newBool = x.HasValue && x.Value;
Ou:
bool newBool = x ?? false;
Linq
cláusula 'Ação rápida' para uma declaração 'Onde', eu não conseguia entender por lifted operators
que parecia não funcionar no Linq (talvez seja apenas o VB.NET?) - Acabei de testar e ele faz lançar uma exceção de elenco inválido
Você pode usar o operador coalescentes nulo : x ?? something
, onde something
é um valor booleano que você deseja usar, se x
é null
.
Exemplo:
bool? myBool = null;
bool newBool = myBool ?? false;
newBool
será falso.
bool? myBool = null; bool newBool = myBool ?? false;
Você pode usar o Nullable{T}
GetValueOrDefault()
método Isso retornará false se nulo.
bool? nullableBool = null;
bool actualBool = nullableBool.GetValueOrDefault();
if (nullableBool.GetValueOrDefault())
Se você usar o bool?
em uma if
declaração, acho que a coisa mais fácil é comparar com um true
ou outro 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"; }
Obviamente, você também pode comparar com nulos.
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 você deseja convertê-lo em um booleano para passar para outras partes do aplicativo, o operador Null Coalesce é o que você deseja.
bool? b = ...;
bool b2 = b ?? true; // null becomes true
b2 = b ?? false; // null becomes false
Se você já verificou nulo e deseja apenas o valor, acesse a propriedade Value.
bool? b = ...;
if(b == null)
throw new ArgumentNullException();
else
SomeFunc(b.Value);
A maneira mais fácil é usar o operador coalescente nulo: ??
bool? x = ...;
if (x ?? true) {
}
Os ??
valores com valor nulo funcionam examinando a expressão nulo fornecida. Se a expressão anulável tiver um valor, seu valor será usado. Caso contrário, ela usará a expressão à direita de??
Esta resposta é para o caso de uso em que você simplesmente deseja testar a bool?
condição. Também pode ser usado para obter um normal bool
. É uma alternativa que eu pessoalmente acho mais fácil de ler do que a coalescing operator ??
.
Se você deseja testar uma condição, pode usar este
bool? nullableBool = someFunction();
if(nullableBool == true)
{
//Do stuff
}
O acima se será verdadeiro somente se o bool?
for verdadeiro.
Você também pode usar isso para atribuir um regular bool
de umbool?
bool? nullableBool = someFunction();
bool regularBool = nullableBool == true;
bruxa é o mesmo que
bool? nullableBool = someFunction();
bool regularBool = nullableBool ?? false;
Esta é uma variação interessante sobre o tema. No primeiro e no segundo olhar, você presumiria que o ramo verdadeiro foi obtido. Não tão!
bool? flag = null;
if (!flag ?? true)
{
// false branch
}
else
{
// true branch
}
A maneira de conseguir o que deseja é fazer o seguinte:
if (!(flag ?? true))
{
// false branch
}
else
{
// true branch
}
System.Convert funciona bem por mim.
using System;
...
Bool fixed = Convert.ToBoolean(NullableBool);
VB.NET
se você fizerdim newBool as Boolean = CBool(x)
:? Seránull
convertido parafalse
ou será lançada uma exceção?