2013-08-02 47 views
16

相反這可能聽起來很奇怪你,但我懶得寫,每次像更改布爾值,初始值

if (threadAlive) 
{ 
      threadAlive = false; 
} 
     else 
{ 
      threadAlive = true; 
} 

是不是有一種東西如int ++或int--改變布爾價值與其價值的相反?

+24

是的,沒有。 –

+1

爲什麼在我的主題-1我沒有得到它:) – user1046403

+3

可悲的是,我發現代碼中的代碼類似於每天...'if(something)result = true; else result = false;'或'if(something)result = false; else result = true;' – xanatos

回答

45

只是這樣做:

threadAlive = !threadAlive; 
+0

@ user1046403 in C/C++你可以編寫一個自定義運算符,使它更簡單,在C#中這是一樣好。 –

+10

即使您可以編寫自定義操作符,也請大家幫忙,不要這樣做。對於懂得這種語言的人,「b =!b」是習慣用語。 – Joel

+0

也許如果有什麼像threadAlive !!那將是真棒。我怎麼能寫一個自定義操作符?任何幫助? – user1046403

4

很簡單:

threadAlive = ! threadAlive; 
12

這將做到這一點:

threadAlive = !threadAlive; 

,正確的說法是Toggle

5

使用!操作者:

bool b = true; 

b = !b; // b is now false 
7

邏輯否定運算!是一個一元運算符否定其操作數。它是爲bool定義和返回true當且僅當它的操作數是falsefalse當且僅當它的操作數是true

threadAlive = !threadAlive; 
13

是的,有!

threadAlive ^= true; 

(這是一個C#的笑話,在最一般的情況下,它不會用C工作/ C++/Java腳本(它可能用C工作/ C++/Java腳本在某些條件下),但它的true!^是異或運算符)

+0

我沒想到在C#中工作,但它確實如此。 +1的獨創性。 –

+0

這是個不好的笑話,因爲沒有指定'threadAlive'的類型。這會導致''不正確''爲「int」的_majority_值,例如「true」。 – sehe

+0

@sehe有一個'C#'標籤。但添加了關於語言的說明。 – xanatos

3

對於基本類型,您不能overload operators(如果這是您正在尋找的內容)。

至於其他人已經提到的,這是迄今爲止最好的選擇:

threadAlive = !threadAlive; 

但是你可以,雖然是我決不會建議,創建自己的bool型和重載++或任何運營商你希望顛倒你的價值。

下面的代碼是什麼,應該從未無論如何使用:

public class MyBool 
{ 
    bool Value; 

    public MyBool(bool value) 
    { 
     this.Value = value; 
    } 

    public static MyBool operator ++(MyBool myBoolean) 
    { 
     myBoolean.Value = !myBoolean.Value; 
     return myBoolean; 
    } 
} 

您也可以創建自己的擴展方法,但不會是一個更好的辦法要麼。