C#IF语句条件执行顺序(VS2010)

时间:2014-03-21 07:45:46

标签: c# if-statement

我有一个包含4个条件的if语句:

if (Global.LoggedAdmin != null &&
    LaunchDataGridView.CurrentCell.ColumnIndex == 5 ||
    LaunchDataGridView.CurrentCell.ColumnIndex == 6 ||
    LaunchDataGridView.CurrentCell.ColumnIndex == 9 )
                 {
                   //code
                 }

如果列索引是5,由于某种原因它不执行代码,其余的列索引可以工作,我知道如果你有一个|| b || c || .... || z,如果其中至少有一个为真,则代码应该执行。 LoggedAdmin始终为null。我尝试将列索引条件1'和最后一个LoggedAdmin条件放在if括号内,如果列索引为5 ||则代码执行6但是当它是9时,这是正常的吗?如果是的话,为什么? PS:我有另一个带有3个参数的IF语句,它或多或少类似于上面的那个,在那里它也失败了一个条件(列索引条件)但是当我把列索引部分放在括号中它起作用时),对于这个例子上面,如果我把它们放在括号中,它不适用于任何列索引:/,我不再理解任何东西了。

5 个答案:

答案 0 :(得分:1)

&&的优先级高于||运算符,这就是为什么&&首先评估:

Global.LoggedAdmin != null && LaunchDataGridView.CurrentCell.ColumnIndex == 5 ...

您可以在此处查看优先顺序:http://msdn.microsoft.com/en-us/library/aa691323(v=vs.71).aspx

这意味着Global.LoggedAdminnull,否则如果索引为5,也会执行。您还必须使用||代替&&:< / p>

if (Global.LoggedAdmin != null ||
    LaunchDataGridView.CurrentCell.ColumnIndex == 5 ||
    LaunchDataGridView.CurrentCell.ColumnIndex == 6 ||
    LaunchDataGridView.CurrentCell.ColumnIndex == 9 )
 {
   //code
 }

或者你需要使用== null并将其余部分用圆括号括起来。如果您提到的LoggedAdmin始终为null,则可能有意义:

if (Global.LoggedAdmin == null && (
    LaunchDataGridView.CurrentCell.ColumnIndex == 5 ||
    LaunchDataGridView.CurrentCell.ColumnIndex == 6 ||
    LaunchDataGridView.CurrentCell.ColumnIndex == 9 ))
 {
   //code
 }

<强>更新

  

LoggedAdmin总是非空,我写了一个错误

这可能是你的代码:

if (Global.LoggedAdmin != null && (
    LaunchDataGridView.CurrentCell.ColumnIndex == 5 ||
    LaunchDataGridView.CurrentCell.ColumnIndex == 6 ||
    LaunchDataGridView.CurrentCell.ColumnIndex == 9 ))
 {
   //code
 }

答案 1 :(得分:1)

我怀疑Global.LoggedAdmin实际上可能为null,而评估的表达式是:

(Global.LoggedAdmin != null && LaunchDataGridView.CurrentCell.ColumnIndex == 5)
 ||
LaunchDataGridView.CurrentCell.ColumnIndex == 6
 ||
LaunchDataGridView.CurrentCell.ColumnIndex == 9

我想你的意思可能是: -

Global.LoggedAdmin != null && (
    LaunchDataGridView.CurrentCell.ColumnIndex == 5 ||
    LaunchDataGridView.CurrentCell.ColumnIndex == 6 ||
    LaunchDataGridView.CurrentCell.ColumnIndex == 9)

仍然不会执行代码,因为Global.LoggedAdmin为空。

答案 2 :(得分:1)

您的问题原则上已经多次得到解答,但我仍然会为您和以后可能阅读您的代码的其他人添加一些细节以便清楚:

您可以将if-clause视为进行两项测试:一项是Global.LoggedAdmin != null,另一项是ColumnIndex是否是您指定的值之一。

为清楚起见,您可以将其拆分如下;结果,你最初的问题也会消失:

if (Global.LoggedAdmin != null && IsRelevantColumn())
{
    //code
}


private static bool IsRelevantColumn(){
    return LaunchDataGridView.CurrentCell.ColumnIndex == 5 ||
           LaunchDataGridView.CurrentCell.ColumnIndex == 6 ||
           LaunchDataGridView.CurrentCell.ColumnIndex == 9;
}

答案 3 :(得分:0)

如您所知,括号将具有更高的优先级。

if (Global.LoggedAdmin != null &&
        LaunchDataGridView.CurrentCell.ColumnIndex == 5 ||
        LaunchDataGridView.CurrentCell.ColumnIndex == 6 ||
        LaunchDataGridView.CurrentCell.ColumnIndex == 9 )
                     {
                       //code
                     }

相当于

if ((Global.LoggedAdmin != null) &&
    (LaunchDataGridView.CurrentCell.ColumnIndex == 5 ||
    LaunchDataGridView.CurrentCell.ColumnIndex == 6 ||
    LaunchDataGridView.CurrentCell.ColumnIndex == 9) )
                 {
                   //code
                 }

答案 4 :(得分:0)

您说Global.LoggedAdmin 总是 null。然后你必须做那样的事情:

if (Global.LoggedAdmin == null &&
LaunchDataGridView.CurrentCell.ColumnIndex == 5 ||
LaunchDataGridView.CurrentCell.ColumnIndex == 6 ||
LaunchDataGridView.CurrentCell.ColumnIndex == 9 )
{
   //code
}

或者,您可以这样做:

if (Global.LoggedAdmin == null &&
(LaunchDataGridView.CurrentCell.ColumnIndex == 5 ||
LaunchDataGridView.CurrentCell.ColumnIndex == 6 ||
LaunchDataGridView.CurrentCell.ColumnIndex == 9 ))
{
   //code
}
相关问题