2009-12-01 40 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