编译器是否继续评估一个表达式,如果第一个为false,则all必须为true?

Nat*_*hot 3 .net c# boolean-logic

我确定这个问题之前可能已经得到了解答,所以我道歉,但我找不到合适的搜索条件来找到答案.

鉴于以下代码示例,是否db.GetRecords().Any()会执行?

string s = "Z";
bool x = s.IndexOfAny(new[] { 'A', 'B' }) > 0 &&
         db.GetRecords().Any();
Run Code Online (Sandbox Code Playgroud)

jas*_*son 8

号两者&&||通过评价短路评价.这意味着a && b如果a为false则返回false,如果为a || btrue则返回true,a并且b在这两种情况下都不会评估.

如果由于某种原因你不想要短路评估,你可以使用按位运算符&|.