ECMA-334: 12.3.3.24 short circuit OR expressions

Microsoft .NET Framework, ASP.NET, Visual C# (CSharp, C Sharp, C-Sharp) Developer Training, Visual Studio


Jump to: navigation, search
C# Language Specification
© 2006 ECMA International

12.3.3.24 || expressions

For an expression expr of the form expr-first || expr-second:

  • The definite assignment state of v before expr-first is the same as the definite assignment state of v before expr.
  • The definite assignment state of v before expr-second is definitely assigned if the state of v after expr-first is either definitely assigned or "definitely assigned after false expression". Otherwise, it is not definitely assigned.
  • The definite assignment statement of v after expr is determined by:
  • If the state of v after expr-first is definitely assigned, then the state of v after expr is definitely assigned.
  • Otherwise, if the state of v after expr-second is definitely assigned, and the state of v after expr-first is "definitely assigned after true expression", then the state of v after expr is definitely assigned.
  • Otherwise, if the state of v after expr-second is definitely assigned or "definitely assigned after false expression", then the state of v after expr is "definitely assigned after false expression".
  • Otherwise, if the state of v after expr-first is "definitely assigned after true expression", and the state of v after expr-second is "definitely assigned after true expression", then the state of v after expr is "definitely assigned after true expression".
  • Otherwise, the state of v after expr is not definitely assigned.

[Example: In the following code

class A
{
  static void G(int x, int y)
  {
    int i;
    if (x >= 0 || (i = y) >= 0)
    {
      // i not definitely assigned
    }
    else
    {
      // i definitely assigned
    }
    // i not definitely assigned
  }
}

the variable i is considered definitely assigned in one of the embedded statements of an if statement but not in the other. In the if statement in method G, the variable i is definitely assigned in the second embedded statement because execution of the expression (i = y) always precedes execution of this embedded statement. In contrast, the variable i is not definitely assigned in the first embedded statement, since x >= 0 might have tested true, resulting in the variable i's being unassigned. end example]


Today's Deals: Electronics

Personal tools