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

本文关键字:VS2010 顺序 执行 IF 语句 条件 | 更新日期: 2023-09-27 17:51:14

我有一个if语句,有四个条件:

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

如果列索引为5,由于某种原因它不会执行代码,对于其他列索引它可以工作,我知道如果你有a || b || c ||....|| z,如果其中至少有一个为真,则执行代码。LoggedAdmin总是不为空。我试着把列索引条件1',和LoggedAdmin条件最后,在if括号内,然后代码执行如果列索引是5 || 6,但不是当它是9,这是正常的吗?如果是,为什么?PS:我有另一个IF语句,有3个参数,或多或少像上面的一个,在那里它失败了一个条件(列索引条件),但当我把列索引部分放在括号里,它工作),对于上面的例子,如果我把它们放在括号里,它不与任何列索引工作:/,我不理解任何东西了。

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

我怀疑Global.LoggedAdmin实际上可能是空的,计算的表达式是:

(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是空的。

你的问题原则上已经回答了很多次,但我仍然要添加一些细节,以清楚起见,既为您,也为以后可能阅读您代码的任何人:

您可以将if子句视为执行两个测试:一个用于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;
}

&&||具有更高的优先级,这就是为什么&&首先求值:

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

您可以在这里看到优先级:http://msdn.microsoft.com/en-us/library/aa691323(v=vs.71).aspx

这意味着Global.LoggedAdminnull,否则如果索引是5,它也会被执行。你也必须使用||而不是&&:

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
 }

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

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
                 }

你说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
}