我遇到了一些看起来像这样的代码:
string someString;
...
bool someBoolean = true;
someBoolean &= someString.ToUpperInvariant().Equals("blah");
为什么我会使用按位运算符而不是“=”?
答案 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)
答案 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;
}
}