2014-12-07 76 views
2

我正在处理某些事情并发现此问题。if语句多重条件和匹配多个值之间的差异

让我们说:

Result = KeyValuePair<bool,bool>; 

我用if语句根据一些作品的结果值做..

1:

if (Result.Key == false && Result.Value == true) 
{ 
    //Do Some Work 
} 

2:

if (Result.Key == Result.Value == false) 
{ 
    //Do Other Work 
} 

但我发现它使用如果Result.Key = false!

这是为什么?

in Number 2:Result.Value = true,所以我认为这种情况不适用于这种情况。 没有第2条语句表示或相同(Result.Key = false & & Result.Value == false)?!

为什么在Result.Value == true时使用?

PS:我知道我可以只使用(否则如果),但我只是想知道这是怎么回事..

感谢。

+0

不确定你的意思。然而,在情况2中,如果'Result.Value'为'true'并且'Result.Key'为'false',那么if块将被执行,因为条件与'Result.Key ==(Result.Value = = false)'。所以如果第二个条件是'false'(即'Result.Value'为'true'),那么如果'Result.Key'为'false'则整个条件为'true'。说得通? – Christian 2014-12-07 19:40:35

+0

是的:)它确实有意义 – 2014-12-07 19:44:17

+0

如果这有道理,那么请求,接受其中一个答案(两者都是相同的)。谢谢:) – Jauch 2014-12-07 19:45:05

回答

2
if (Result.Key == Result.Value == false) 
{ 
    //Do Other Work 
} 

这是一样的

if ((Result.Key == Result.Value) == false) 
{ 
    //Do Other Work 
} 

这是一样的

if (Result.Key != Result.Value) 
{ 
    //Do Other Work 
} 

除非我糊涂了,并(Result.Key == Result.Value == false)实际上是一样的(Result.Key == (Result.Value == false)),在这种情况下仍然是Result.Key != Result.Value。这很混乱,所以请永远不要链接平等运营商。它不会像你期望的那样工作。

你可以在这里详细查看规则:http://msdn.microsoft.com/en-us/library/126fe14k.aspx

+0

非常感谢您的帮助。 – 2014-12-07 19:52:54

1

这与if条件中的评估顺序有关。

Result.Key = false。 Result.Value = true

第一次比较,Result.Key == Result.Value将返回false。 然后,第二次评估将是false == false,这是真的。

因此,在这种情况下,块将被执行。

+0

所以,它通过阶段?!这是为什么?如果不是bool,bool比较怎么办?字符串,例如字符串:A =是和B =否..如果我们使用if(A == B == Yes)会发生什么?也会用到吗? – 2014-12-07 19:47:16

+0

@ Dr.Vision同样如此。 (A == B ==“Yes”)与((A == B)==“Yes”)相同。导致无效尝试将布尔值与字符串进行比较(false ==“Yes”),因此无法编译。 – Peter 2014-12-07 19:48:36

+0

非常感谢您的帮助。 – 2014-12-07 19:52:21