“如果”声明 - 对象的验证顺序?

时间:2010-08-24 12:58:22

标签: c#

关于C#.NET中IF语句顺序的简单问题

if (Company !=null && Company.ID > 0)
{
}

C#是否从左到右工作,因此对Company.ID的检查是否有效?

感谢。

6 个答案:

答案 0 :(得分:32)

基本上,是的。

if语句期望括号内的布尔运算符确定对下一个语句的评估。

使用&&运算符,如果第一个布尔检查Company !=null为false,则语句返回false,而不执行另一个(Company.ID > 0)。

另外(供参考),使用||运算符将在第一个语句后返回true,如果它为真且不计算第二个语句。

答案 1 :(得分:6)

MSDN

  

条件AND运算符(&&)执行其bool操作数的逻辑AND,但只在必要时才计算其第二个操作数。

答案 2 :(得分:3)

&&运营商是所谓的短路运营商。它从左到右测试语句,并在其中一个测试失败后停止测试。如果您想要运行每个测试,请使用&操作

可以找到更多信息here

答案 3 :(得分:3)

是的,确实如此。您可以通过替换函数调用的条件来证明这一点:

if (myfunc() && myfunc2())
{
  console.writeline("Success");
}

...

bool myfunc()
{
  console.writeline("func1");
  return false;
}
bool myfunc2()
{
  console.writeline("func2");
  return true;
}

应输出:

func1
Success

答案 4 :(得分:1)

此外,如果由于某种原因需要评估两个表达式而不是快捷方式,请使用单个“&”而不是双倍。

http://msdn.microsoft.com/en-us/library/2a723cdk(VS.80).aspx

答案 5 :(得分:0)

简答:是的

更长的答案:该形式的并将使用短路评估,因此如果公司为空则则不会执行第二次检查。