if(a或b)和c语句

Tra*_*son 0 c# if-statement

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的行,还更改表以阐明一个真实示例.

Nic*_*rey 5

你的预期解析是什么?逻辑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,请始终使用括号来表示您的意图.逻辑表达式中误解运算符优先级是错误的主要来源.