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

时间:2010-12-29 16:56:32

标签: c# bitwise-operators

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

string someString;

...

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

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

6 个答案:

答案 0 :(得分:13)

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

它与:

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

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

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

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

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

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

答案 1 :(得分:2)

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

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

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

答案 2 :(得分:2)

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

答案 3 :(得分:2)

简称:

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

请参阅MSDN(& =运营商)。

答案 4 :(得分:1)

这是简短形式:

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

答案 5 :(得分:1)

正如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;
    }
}