web-dev-qa-db-fra.com

Convert bool nullable? bool

Comment convertir un bool? Nullable en bool en C #?

J'ai essayé x.Value Ou x.HasValue ...

106
KentZhou

En fin de compte, vous devez décider de ce que le null bool représentera. Si null doit être false, vous pouvez faire ceci:

bool newBool = x.HasValue ? x.Value : false;

Ou:

bool newBool = x.HasValue && x.Value;

Ou:

bool newBool = x ?? false;
161
Ken Pespisa

Vous pouvez utiliser le opérateur null-coalescing : x ?? something, où something est une valeur booléenne que vous souhaitez utiliser si x est null.

Exemple:

bool? myBool = null;
bool newBool = myBool ?? false;

newBool sera faux.

99
SLaks

Vous pouvez utiliser la méthode Nullable{T}GetValueOrDefault(). Cela retournera false si null.

 bool? nullableBool = null;

 bool actualBool = nullableBool.GetValueOrDefault();
80
Joel Briggs

Le moyen le plus simple consiste à utiliser l'opérateur de coalescence nul: ??

bool? x = ...;
if (x ?? true) { 

}

Le ?? avec des valeurs nullables fonctionne en examinant l'expression nullable fournie. Si l'expression nullable a une valeur, sa valeur sera utilisée, sinon elle utilisera l'expression située à droite de ??

5
JaredPar

Si vous utilisez le bool? dans une instruction if, je trouve que la meilleure chose à faire est de comparer avec true ou 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"; }

Bien sûr, vous pouvez également comparer avec 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 vous voulez le convertir en un bool pour le transférer à d'autres parties de l'application, l'opérateur Null Coalesce est ce que vous voulez.

bool? b = ...;
bool b2 = b ?? true; // null becomes true
b2 = b ?? false; // null becomes false

Si vous avez déjà vérifié la valeur null et que vous souhaitez simplement obtenir la valeur, accédez à la propriété Value.

bool? b = ...;
if(b == null)
    throw new ArgumentNullException();
else
    SomeFunc(b.Value);
4
David Yaw
bool? a = null;
bool b = Convert.toBoolean(a); 
3
astronought

Quelque chose comme:

if (bn.HasValue)
{
  b = bn.Value
}
2
manojlds

La voie complète serait:

bool b1;
bool? b2 = ???;
if (b2.HasValue)
   b1 = b2.Value;

Ou vous pouvez tester des valeurs spécifiques en utilisant

bool b3 = (b2 == true); // b2 is true, not false or null
2
CodeNaked

Cette réponse concerne le cas d'utilisation lorsque vous voulez simplement tester le bool? dans une condition. Il peut également être utilisé pour obtenir un bool normal. C'est une alternative que je trouve personnellement plus facile à lire que le coalescing operator ??.

Si vous voulez tester une condition, vous pouvez l'utiliser

bool? nullableBool = someFunction();
if(nullableBool == true)
{
    //Do stuff
}

Ce qui précède ne sera vrai que si le bool? est vrai.

Vous pouvez également l'utiliser pour assigner un bool normal à partir d'un bool?

bool? nullableBool = someFunction();
bool regularBool = nullableBool == true;

la sorcière est la même chose que

bool? nullableBool = someFunction();
bool regularBool = nullableBool ?? false;
2
Rémi

C'est une variation intéressante sur le thème. Au premier et au deuxième regard, vous supposez que la véritable branche est prise. Pas si!

bool? flag = null;
if (!flag ?? true)
{
    // false branch
}
else
{
    // true branch
}

Pour obtenir ce que vous voulez, procédez comme suit:

if (!(flag ?? true))
{
    // false branch
}
else
{
    // true branch
}
0
stevieg