2009-11-16 4 views
1

Possible Duplicate:
== Operator and operandsC évaluation de l'expression # bool ordre

Possible Duplicates:
Is there any difference between if(a==5) or if(5==a) in C#?
== Operator and operands

Ok, cela peut être question stupide, mais la recherche dans google (cant semblent chercher EFFECTIVEMENT une expression exacte même avec guillemets)

si une différence existe entre

if(false == <somecondition>){

et

if(<somecondition> == false){

en C#? Je connais l 'expression de C# évalution, et comprendre comment l'ordre serait logique si vous faisiez quelque chose comme:

if(AccountIsInvalid || AccountIsUnregistered)

Je ne besoin d'une grande leçon, mais je voudrais comprendre pourquoi certaines personnes préfèrent faire choses avec false==.... itinéraire.

+4

Dup de nombreux ... regardant maintenant ... –

+2

Bien sûr, utilisez 'if (! )' et cela devient un non-problème ;-p –

+0

Un duplicata ici - http://stackoverflow.com/questions/797162/is-there-any-difference-entre-ifa5-ou-if5a-in-c-closed – ChrisF

Répondre

3

Personnellement, je ne compare jamais rien à faux ou vrai.

Je voudrais aller avec:

if (!somecondition) 

ou:

if (somecondition) 
3

En C il y aurait eu, peut-être, une raison de le faire car vous pourriez facilement faire une erreur et utiliser l'affectation l'opérateur de comparaison, mais en C# cela ne devrait pas faire de différence - vous obtiendrez un avertissement de compilation si vous utilisez l'opérateur d'assignation. Si l'affectation était de type différent (disons int), il en résulterait une erreur, puisque le résultat ne serait pas une expression légale pour l'instruction if.

Je préfère que ce soit

if (!<somecondition>) 
{ 
    ... 
} 

plutôt qu'une comparaison à faux (ou vrai, d'ailleurs).

+0

C'est un avertissement, pas une erreur: 'bool b; if (b = true) {Console.WriteLine ("abc"); } ' –

+0

@Marc - merci pour la clarification. C'est certainement vrai dans le cas d'une variable booléenne. Je n'avais pas considéré cela.Je suppose que je suis trop habitué à le voir dans le contexte d'un autre type de valeur - ce qui serait une erreur. – tvanfosson

+0

Ah, assez juste ;-p En effet, la tendance de Cs à traiter n'importe quoi non-nul comme vrai est une douleur. –

0

Cela n'a pas d'importance en C# comme dans c/C++ car les conditions doivent être évaluées à un booléen.

+0

Pas * tout à fait * vrai ... ils doivent avoir une conversion implicite en booléen, ou une vraie fonction. Notez également que le résultat de l'affectation est toujours booléen, et fonctionne ... –

+0

Considérez: 'bool b; if (b = true) {Console.WriteLine ("abc"); } ' –

+0

assez vrai, j'aurais dû dire n'a pas d'importance" autant que cela ... "parce que vous ne pouvez pas accidentellement faire ce qui suit dans C# int i; si (i = 0) {...} –

1

Avant d'effectuer des optimisations ou un court-circuit, le compilateur doit résoudre <somecondition> à true ou false valeur, il n'y a donc aucune raison pour le compilateur évaluer les expressions <somecondition> == false et false == <somecondition> différemment.

Cela doit sûrement être une question de style et de style seulement.