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

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

string someString; ... bool someBoolean = true; someBoolean &= someString.ToUpperInvariant().Equals("blah"); 

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

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

它与以下相同:

 someBoolean = someBoolean & someString.ToUpperInvariant().Equals("blah"); 

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

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

 someBoolean = someBoolean && someString.ToUpperInvariant().Equals("blah"); 

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

 bool someBoolean = "blah".Equals(someString, StringComparison.InvariantCultureIgnoreCase); 
 someBoolean = someBoolean & someString.ToUpperInvariant().Equals("blah"); 

在这种情况下,在someBoolean为true之前,意味着

 someBoolean = someString.ToUpperInvariant().Equals("blah"); 

对于&运算符,它相当于+=

它的简称:

 someBoolean = someBoolean & someString.ToUpperInvariant().Equals("blah"); 

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

这是一个简短的forms:

 someBoolean = someBoolean & someString.ToUpperInvariant().Equals("blah") 

正如Guffa指出的那样,&和&&之间存在差异。 我不会说你可以,但是你应该使用&&代替&:并使你的代码更加诡异,但&&使你的代码更具可读性……并且性能更高。 以下说明如何:

 class Program { static void Main(string[] args) { Stopwatch Chrono = Stopwatch.StartNew(); if (false & Verifier()) Console.WriteLine("OK"); Chrono.Stop(); Console.WriteLine(Chrono.Elapsed); Chrono.Restart(); if (false && Verifier()) Console.WriteLine("OK"); Chrono.Stop(); Console.WriteLine(Chrono.Elapsed); } public static bool Verifier() { // Long test Thread.Sleep(2000); return true; } }