2009-12-01 60 views
0

我看到下面的代碼,這讓每個人都感到震驚。這是如何解釋?

該代碼是如何執行的?

if (!Test.IsXyz == true) 
{ } 

如果IsXyz解析爲真,但隨後使用!這個代碼是如何解釋的?因爲RHS是正確的。這是:

1)假LHS | True for RHS == False(From my truth table days)

假設bool解析爲真,我可以想象這種代碼會被理解的幾種奇怪的方法。編譯器的官方途徑是什麼?

+2

這可能是點以外,但真的沒有理由比較布爾值與true或false。只要做'if(!Test.IsXyz)'。 – 2009-12-01 23:42:31

+0

我知道。我也是這麼做的。從來沒有需要正確==,但這是另一個寫這個的小輩。 – dotnetdev 2009-12-02 00:11:23

回答

1

評估爲false。

換句話說,代碼:

var Test = new { IsXyz = true }; 

if (!Test.IsXyz == true) 
{ 
    Console.WriteLine("TRUE"); 
} 

不打印屏幕上的任何內容。

+0

那麼如果Test.IsXYZ返回false會發生什麼? – zebrabox 2009-12-01 23:42:25

+0

顯然,屏幕上顯示「TRUE」。 :-) – CesarGon 2009-12-01 23:46:02

+0

如果這是真的? – zebrabox 2009-12-01 23:47:21

2

根據C#運算符優先級,這應該作爲

((!Test.IsXyz)==真)

因此假(左)和True(RHS)進行評估。

+0

最後評估爲假:)所以我有正確的想法... – dotnetdev 2009-12-02 00:12:37

1

聲明是一個更詳細的,雖然同樣有效,相當於

if (!Test.IsXyz) 
{ 
} 

所以,如果結果若爲假,則該條件的結果是正確的。
如果結果爲真,則條件的結果爲false。

0

訂購劑量沒有真正的問題在這裏

,你有乙醚!(L == R)或(!L)== R,但作爲等於可以被視爲同一件事

L = T : !(T == T) -> !(T) -> F or (!T) == T -> F == T -> F 

L = F : !(F == T) -> !(F) -> T or (!F) == T -> T == T -> T