这个C#代码中的"&="有什么作用?

Mat*_*kan 9 c# bitwise-operators

我遇到了一些看起来像这样的代码:

string someString;

...

bool someBoolean = true;
someBoolean &= someString.ToUpperInvariant().Equals("blah");
Run Code Online (Sandbox Code Playgroud)

为什么我会使用按位运算符而不是"="?

Guf*_*ffa 21

当它应用于布尔运算符时,它不是一个按位运算符.

它与以下相同:

someBoolean = someBoolean & someString.ToUpperInvariant().Equals("blah");
Run Code Online (Sandbox Code Playgroud)

您通常会看到快捷方式和运算符&&,但是&当应用于布尔运算符时,运算符也是运算符,只有它不执行快捷位.

您可以使用&&运算符(但没有&&=运算符)来节省一些计算.如果someBoolean包含false,则不会评估第二个操作数:

someBoolean = someBoolean && someString.ToUpperInvariant().Equals("blah");
Run Code Online (Sandbox Code Playgroud)

在您的特殊情况下,变量设置为true之前的行,因此和操作是完全不必要的.您只需计算表达式并分配给变量即可.此外,您应该使用比较来处理您想要比较的方式,而不是转换字符串然后进行比较:

bool someBoolean =
  "blah".Equals(someString, StringComparison.InvariantCultureIgnoreCase);
Run Code Online (Sandbox Code Playgroud)

  • 当按位运算符应用于System.Booleans时,它们仍然是按位运算符.但是,由于C#将'true'设置为等于1,因此它们最终具有与布尔运算符相同的真值表.但是,任何非零整数都可以作为有效的真值.有关示例,请参见http://dotnetpad.net/ViewPaste/6wYCZ3QmNUClKXiYi113Pw. (4认同)

SLa*_*aks 8

这相当于+=&运营商。


Ode*_*ded 5

它的缩写是:

someBoolean = someBoolean & someString.ToUpperInvariant().Equals("blah");
Run Code Online (Sandbox Code Playgroud)

请参阅MSDN(&= 运算符)。