if语句我有多个选项有困难.
版本1匹配所有而不考虑&& .contains("up")
if (
|| drow["ifName"].ToString().ToLower().Contains("vlan")
|| drow["ifName"].ToString().ToLower().Contains("st0")
|| drow["ifName"].ToString().ToLower().Contains("ge-0")
&& drow["ifStatus"].ToString().ToLower().Contains("up")
)
Run Code Online (Sandbox Code Playgroud)
版本2不匹配.
if ( (
|| drow["ifName"].ToString().ToLower().Contains("vlan")
|| drow["ifName"].ToString().ToLower().Contains("st0")
|| drow["ifName"].ToString().ToLower().Contains("ge-0")
)
&& drow["ifStatus"].ToString().ToLower().Contains("up")
Run Code Online (Sandbox Code Playgroud)
我错过了什么?
表看起来基本上像
ifName | ifStatus
vlan.0 | up
st0.1 | up
pp0.0 | up
ge-0/0/0 | down
Run Code Online (Sandbox Code Playgroud)
编辑:
因此,目标是仅匹配具有ifStatus = UP的行,还更改表以阐明一个真实示例.
你的预期解析是什么?逻辑OR(||)和逻辑AND(&&)都是左关联的并且具有不同的运算符优先级:
http://msdn.microsoft.com/en-us/library/aa691323(v=vs.71).aspx
逻辑AND比逻辑OR绑定得更紧密,因此,表达式就像
A || B || C && D
Run Code Online (Sandbox Code Playgroud)
解析好像是写的
A || B || ( C && D )
Run Code Online (Sandbox Code Playgroud)
如果这是你的意图,那你很好.如果没有,您需要根据需要添加括号以获得所需的解析.我怀疑你的预期解析更像是:
(A || B || C ) && D
Run Code Online (Sandbox Code Playgroud)
但这不是原始测试解析的方式.
作为一个很好的一般规则,如果您在逻辑表达式中混合使用AND和OR,请始终使用括号来表示您的意图.逻辑表达式中误解运算符优先级是错误的主要来源.