2011-11-23 84 views
4

我可以写c#:编写v1的更短路! ? V2:V2

bool v1, v2; 
// ... 

编辑:我的困惑深表歉意。正确的说法应该是:

bool v3 = !v1 ? v2 : !v2; 

ORIGINAL我问

bool v3 = v1 ? v2 : !v2; 

更短?或者:是否有运营商会有相同的结果?

因此,我标记了Anders Abels的答案是正确的,因为他回答了我最初的问题。我只需要反转他的答案。

+0

您能否提供整个声明不仅条件? – sll

回答

2

可以使用xor(在^运营商),这将给true如果一个操作数,只有一个是true。它会返回你想要的对面,所以你要否定一切:

!(v1^v2); 
+5

我认为有趣的是,* xor *与*不等于*相同。所以你的表达和'v1 == v2'一样。 – svick

11

我觉得v1==v2应该这样做。

编辑:

为更新的问题,这是v1!=v2,或v1^v2作为安德斯说。

+0

简单而优雅。我休息我的情况:-) –

+0

我认为'v1!= v2'是最优雅的解决方案。 –

4

Vlad已经提供了正确的答案。我只是添加一个简单的表格,可能有助于说明如何解决这些问题。

  | v2 = true | v2 = false | 
-----------+------------+------------+ 
v1 = true | false | true | 
-----------+------------+------------+ 
v1 = false | true | false | 
-----------+------------+------------+ 

编辑:该表已更新,以匹配更新的问题。

由于弗拉德已经提出了表达式可以重构为!=。为了澄清,添加了Paagesheses。编译器不需要它们。

bool v3 = (v1 != v2); 
+0

我的错误。我没有写出正确的问题......他的回答现在已被标记出来。谢谢你的桌子。 – SACO