2010-11-16 5 views
4
bool? x = true; 
if (x == true) 

semble maladroit.En C# bool? x = vrai; Si (x == vrai) semble maladroit

Mais parfois c'est exactement ce dont on a besoin.

Y a-t-il un meilleur moyen?

EDIT:

Merci à tous pour les tentatives, mais jusqu'à présent je n'ai pas trouvé un moyen qui battre l'original. Je suppose que je vais juste devoir faire face à la maladresse, peut-être commenter.

Répondre

1

if (x) est équivalent à if (x == true). Il n'est pas nécessaire de faire une comparaison supplémentaire puisque x est une valeur booléenne.

Édition: Manqué qui était nullable. Dans ce cas, c'est vraiment le meilleur que vous pouvez obtenir, sauf si vous voulez faire une simple fonction d'assistance.

bool isTrue(bool? value) { 
    return value == true; 
} 

Mais if (isTrue(x)) n'est pas beaucoup plus propre.

+2

Notez le point d'interrogation. – jball

+1

Sauf que c'est un 'bool? ', Pas un' bool'. –

+1

J'ai manqué le? parce que Hamish a mis tout le code dans le titre au lieu du code formaté dans la question réelle. – unholysampler

1
bool? x = true; 
if (x.HasValue && x.Value) 
{ /* Other code here */ } 

ou utiliser GetValueOrDefault(), mais ce n'est pas terser ...

bool? x = true; 
if (x.GetValueOrDefault(false)) 
{ /* Other code here */ } 
+1

Contrairement à l'original, cela lancera 'InvalidOperationException' sur null. –

+0

Pas sur ma machine ce n'est pas le cas. Tout ce que je reçois est "l'expression est toujours vraie" avertissement –

+2

Mettez 'x' à' null', puis essayez. – ChaosPandion

8

En fonction de votre situation, vous pouvez utiliser l'opérateur coalescent null, ce qui vous permet de spécifier la valeur par défaut que vous » ll utilisera si bool? n'est pas défini. Ce n'est pas plus courte que votre condition, mais je pense qu'il est utile:

if(x ?? true) //defaults to true if x is not set 

Ou, pour répliquer directement votre cas (et en raison de la demande populaire):

if(x ?? false) //defaults to false if x is not set 
+0

Pour être plus fidèle à la question initiale, vous voudriez probablement 'if (x ?? false)' de sorte que 'null' ne correspond pas à la condition. À ce stade, alors que le code est fidèle à l'intention originale, il est sans doute moins intuitif que 'x == true' – Dinah

+0

Pour être techniquement correct, il devrait être fusionné à' false' plutôt que le corps ne serait exécuté que si 'x 'était' vrai'. –

+0

Pour produire le même résultat que le code OP, il devrait être 'x ?? false' et par défaut à false. – unholysampler