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个参数,或多或少像上面的一个,在那里它失败了一个条件(列索引条件),但当我把列索引部分放在括号里,它工作),对于上面的例子,如果我把它们放在括号里,它不与任何列索引工作:/,我不理解任何东西了。
我怀疑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.LoggedAdmin
是null
,否则如果索引是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
}