287 votes

Le meilleur moyen de vérifier la nullable bool dans une expression de condition (si ...)

Je me demandais ce qui était le plus propre et compréhensible de la syntaxe pour faire des contrôles des conditions sur les valeurs null booléens.

Est la suite de bon ou de mauvais style de codage? Est-il un moyen d'exprimer la condition de mieux/plus proprement?

bool? nullableBool = true;
if (nullableBool ?? false) { ... }
else { ... }

surtout la si (nullableBool ?? false) . Je n'aime pas l' if (x.HasValue && x.Value) style ...

(je ne sais pas si la question a été posée avant ... ne pouvais pas trouver quelque chose de similaire avec la recherche)

483voto

Artiom Chilaru Points 5049

Je pense que beaucoup de gens se concentrent sur le fait que cette valeur est nullable, et ne pas y penser ce qu'ils veulent réellement :)

bool? nullableBool = true;
if (nullableBool == true) { ... } // true
else { ... } // false or null

Ou si vous voulez plus d'options...

bool? nullableBool = true;
if (nullableBool == true) { ... } // true
else if (nullableBool == false) { ... } // false
else { ... } // null

(nullableBool == true) ne sera jamais retourner true si le booléen? est nulle :P

108voto

Lucero Points 38928

Comment sur l'utilisation de GetValueOrDefault, qui est assez explicite et permet de faire usage de quelque défaut que vous souhaitez:

if (nullableBool.GetValueOrDefault(false)) {
}

64voto

Dan Diplo Points 16133

Vous ne pouvez pas ça, mais personnellement, je trouve

if (x.HasValue && x.Value)

le plus lisible. Il indique clairement que vous travaillez avec un type nullable et il est clair que vous sont tout d'abord de vérifier si le type nullable a une valeur avant d'agir sur elle de façon conditionnelle.

Si vous prenez votre version et de remplacer la variable x, il se lit comme suit:

if (x ?? false)

Est plus clair? Il est évident que x est un type nullable? Je vous laisse décider.

29voto

Oded Points 271275

Si vous souhaitez traiter une null fausse, alors je dirais que la plus succincte façon de le faire est d'utiliser la valeur null fusionnent opérateur (??), comme vous le décrivez:

if (nullableBool ?? false) { ... }

9voto

Andrey Frolov Points 1137

Utilisation des extensions.

public static class NullableMixin {
    public static bool IsTrue(this System.Nullable<bool> val) {
        return val ?? false;
    }
    public static bool IsFalse(this System.Nullable<bool> val) {
        return !val ?? false;
    }
    public static bool IsNull(this System.Nullable<bool> val) {
        return !val.HasValue
    }
    public static bool IsNotNull(this System.Nullable<bool> val) {
        return val.HasValue
    }
}


Nullable<bool> value = null;
if(value.IsTrue())
 ... 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X