2012-12-06 30 views
-3

可能吗?如果x和y =>或者如果y =>或者如果y在C#

如:

z = something; 
w = something else; 

if (x == z && y == z){ 
    Do something; 
} or if (y == w){ 
    Do something else; 
or if... 
or if... 

基本上我想要的是写作的一个简单的方法:

if (x == z && y == z){ 
    Do something; 
else if (x == z && y == w){ 
    Do something else; 
if else... 
if else... 

,这并不比较x和z每次 (和心不是最明显的,就像使用多个ifs,除非是更简单的那个)

+1

你的问题是非常清楚的.... – raym0nd

+0

尝试一下,这是最好的方式来找出 - 如果你很幸运,它甚至可以编译。 – Casperah

+0

if(x == z){if(y == z){...} else if(y == w){...}} – Vultour

回答

1
switch (expression) 
{ 
    case constant-expression: 
     statement 
     jump-statement 
    [default: 
     statement 
     jump-statement] 
} 
0

Just swi tch您的比较顺序:

if (y == z && x == z) 
{ 
    Do something; 
} 
else if (y == w && x == z) 
{ 
    Do something else; 
} 
else if ... 
else if ... 

x只会在第一个条件为真时由于短路而与z进行比较。

+0

问题是,在这里,如果'y == Z'和'y == W'都是假的,那么'x == z'会被比较两次。这就是他想要避免的(如果'x'或'z'产生副作用,或者计算起来很昂贵,这可能很重要)。 – Servy

+0

@Servy是短路比较的重点。在你描述的情况下,x和z永远不会被比较。 http://msdn.microsoft.com/en-us/library/2a723cdk(v=vs.110).aspx“如果x是假的,y没有评估” –

+0

对不起,我的意思是说哪里都有'y == z'和'y == w'是真的,'x == z'是假的。在这种情况下,你评估'x == z'两次。 – Servy

6

听起来像你只是想嵌套if/else。

if (x == z) { 
    if (y == z) { 
     ... 
    } else if (y == w) { 
     ... 
    } else { 
     ... 
    } 
} else { 
    ... 
} 
+0

这正是我的想法。 – Douglas

2

检查x!=z第一:

if (x != z) 
{ 
    // maybe do nothing? 
} 
else if(y == z) 
{ 
    // Do something; 
} 
else if (y == w) 
{ 
} 

或嵌套:

if (x == z) 
{ 
    if(y == z){ 
    Do something; 
    } 
    else if (y == w){ 
    } 
} 
0

你可以做一次比较,并将结果保存在本地布尔变量。然后在if语句中使用该布尔。

bool b = (x==z); 
if (b && y == z){ 
    Do something; 
else if (b && y == w){ 
    Do something else; 

虽然,我仍然会做嵌套的,如果其他人有推荐。

相关问题