Ce n'est pas un opérateur de bits lorsqu'il est appliqué aux opérateurs booléens.
Il est le même que:
someBoolean = someBoolean & someString.ToUpperInvariant().Equals("blah");
Vous voyez habituellement le raccourci et l'opérateur &&
, mais l'opérateur &
est également un opérateur et lorsqu'il est appliqué à booléens, seulement il ne fait pas le court couper le bit.
Vous pouvez utiliser l'opérateur &&
à la place (mais il n'y a pas d'opérateur &&=
) pour éventuellement économiser sur certains calculs. Si le someBoolean
contient false
, le second opérande ne sera pas évaluée:
someBoolean = someBoolean && someString.ToUpperInvariant().Equals("blah");
Dans votre cas particulier, la variable est définie à true
sur la ligne avant, de sorte que le fonctionnement et est complètement unneccesary. Vous pouvez simplement évaluer l'expression et l'affecter à la variable. En outre, au lieu de convertir la chaîne, puis comparer, vous devez utiliser une comparaison qui gère la façon dont vous voulez comparé:
bool someBoolean =
"blah".Equals(someString, StringComparison.InvariantCultureIgnoreCase);
Je considère que le code plutôt moche. C'est plus court, mais ça me semble un peu abusif d'utiliser un bit et quand vous voulez vraiment dire logique et. Notez également que logique et supporte le court-circuit et évite ainsi le besoin de calculer 'someString.ToUpperInvariant(). Equals (" blah ");' quand 'someBoolean' est' true'. – Brian
@Brian: Ce n'est pas un opérateur au niveau du bit lorsqu'il est appliqué aux booléens. – Guffa
@Guffa: Oui, vous avez raison. [Le MSDN] (http://msdn.microsoft.com/en-us/library/sbf85k1c.aspx) indique réellement cela explicitement. Je suppose que la norme fait aussi bien. – Brian