2014-12-07 85 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