在C#中有:&(逻辑与) 、|(逻辑或)、&&(条件与) 、||(条件或) 、这几个操作数,
在上面的这两个例子中,逻辑与条件有什么区别吗?在实际应用中又应该注意什么呢??
&(逻辑与) 、|(逻辑或)是一般的用法,&&(条件与) 、||(条件或)称为短路的用法。就是当前一个条件满足后,后一个条件就不判断了!
x && y
如果 x 为 false,则不计算 y。这被称作为“短路”计算。
&& 运算符请参见
C# 运算符 | 7.11 条件逻辑运算符
条件“与”运算符 (&&) 执行布尔操作数的逻辑“与”运算,但如有必要,只计算第二个操作数。
expr1 && expr2
此处:
expr1
一个表达式。
expr2
一个表达式。
备注
操作
x && y
对应于操作
x & y
不同的是,如果 x 为 false,则不计算 y。这被称作为“短路”计算。
不能重载条件“与”运算符,但规则逻辑运算符和运算符 true 及 false 的重载在某些限制条件下也被视为条件逻辑运算符的重载。
示例
在下面的示例中,请观察使用 && 的表达式只计算第一个操作数。
// cs_operator_logical_and.cs
using System;
class Test
{
static bool fn1()
{
Console.WriteLine("fn1 called");
return false;
}
static bool fn2()
{
Console.WriteLine("fn2 called");
return true;
}
public static void Main()
{
Console.WriteLine("regular AND:");
Console.WriteLine("result is {0}", fn1() & fn2());
Console.WriteLine("short-circuit AND:");
Console.WriteLine("result is {0}", fn1() && fn2());
}
}
输出
regular AND:
fn1 called
fn2 called
result is False
short-circuit AND:
fn1 called
result is False
int i=0;
if(5>4 || i++<3)
Console.WriteLine(i.ToString());
int i=0;
if(5>4 | i++<3)
Console.WriteLine(i.ToString());
运行代码看看你就明白了