C#If语句中条件的执行顺序

LCJ*_*LCJ 24 .net c# conditional short-circuiting logical-operators

下面有两个if语句,它们使用逻辑运算符有多个条件.逻辑上两者都相同,但检查顺序不同.第一个工作,第二个工作失败.

我引用了MSDN来检查是否定义了执行条件的顺序; 但我找不到.

考虑具有&&逻辑运算符的多重检查条件.是否保证始终检查第一个条件,如果不满足,则不会检查第二个条件?

我曾经使用方法1,它运作良好.寻找证明使用的MSDN参考.

UPDATE

参考"短路"评估

  List<string> employees = null;  

  if (employees != null && employees.Count > 0)
  {
        string theEmployee = employees[0];
  }

  if (employees.Count > 0 && employees != null)
  {
        string theEmployee = employees[0];
  }
Run Code Online (Sandbox Code Playgroud)

Pat*_*shu 51

&&和|| 运营商短路.那是:

1)如果&&将其第一个操作数计算为false,则不会计算其第二个操作数.

2)如果|| 将其第一个操作数计算为true,它不计算其第二个操作数.

这使得您可以对对象执行null检查&&做一些事情,就好像它不为null,不计算第二个操作数.

  • @Lijo Googling ["msdn short-circuit"](https://www.google.com/search?q=msdn+short-circuit),前两个结果 - [this](http://msdn.microsoft.com /en-us/library/2a723cdk(v=vs.71).aspx)和[this](http://msdn.microsoft.com/en-us/library/6373h346(v = vs.71).aspx) .那些足够吗? (5认同)

Dar*_*ren 10

你应该使用:

  if (employees != null && employees.Count > 0)
  {
        string theEmployee = employees[0];
  }
Run Code Online (Sandbox Code Playgroud)

&&将短路,employees.Count如果employees是,将不会被执行null.

在第二个例子中,如果应用程序会抛出异常employeesnull当您尝试Count集合中的元素.

http://msdn.microsoft.com/en-us/library/2a723cdk(v=vs.71).aspx


Joh*_*mse 8

从左到右检查条件.&&如果左边条件为真,操作员将仅评估正确的条件.

C#语言规范的第5.3.3.24节规定:

5.3.3.24 &&表达式

对于表单的表达式exprexpr-first && expr-second:

·v之前expr-first的明确赋值状态与expr之前的v的明确赋值状态相同.

· expr-second如果v after的状态expr-first是明确赋值或"在真实表达后明确赋值" ,则明确指定v before的明确赋值状态.否则,它没有明确分配.

·expr后v的明确赋值状态由下式确定:

o如果expr-first明确分配了v after的状态,则明确赋值expr之后的v的状态.

o否则,如果v after的状态expr-second是明确赋值的,并且v after的状态expr-first是"在伪表达式后明确赋值",那么expr之后的v的状态是明确赋值的.

o否则,如果v after的状态expr-second明确赋值或"在真实表达后明确赋值",则expr之后的v的状态为"在真实表达后明确赋值".

o否则,如果v after的状态expr-first是"在假表达后明确赋值",并且v after的状态expr-second是"在假表达后明确赋值",则expr之后的v的状态是"在假表达后明确赋值".

o否则,expr之后的v状态未明确赋值.

因此,这清楚地表明expr-first总是被评估,如果是真的那么,只有这样,expr-second也被评估.


Chi*_*rag 5

&& 和 || 运算符通常用于检查对象条件。

1) “&&”条件将其第一个操作数评估为假,它不评估其第二个操作数。如果返回 true,则计算第二个条件。如果第二个条件为真,则只有它会返回真。因此 && 可用于确保所有条件都满足有效。

2)“||” 条件评估其第一个操作数为真,它不评估其第二个操作数。如果第一个条件评估为假,那么只有它会评估为第二个条件。如果满足,则返回true。否则为假。