2013-08-02 20 views
16

tersi için bool değerlerini değiştirme amaBu belki size garip başlangıç ​​değerinin

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

gibi her şey yazmak için çok tembelim int gibi bir şey ++ veya değiştirmek için int-- bool vardır değil değerinin karşısındaki değer?

threadAlive = !threadAlive; 
+24

Evet, yok. –

+1

Neden benim başıma -1 bunu alamadım :) – user1046403

+3

Üzgün ​​şey, kodla her gün ona benzer bir kod bulduğum ... 'if (bir şey) sonucu = true; else sonuç = false; 'veya eğer (bir şey) sonuç = yanlış; else = true; ' – xanatos

cevap

45

Sadece bunuoperatörü:

bool b = true; 

b = !b; // b is now false 
+0

@ user1046403 C/C++ Bunu daha kolay yapan bir özel işleç yazabilirsin, C# bu kadar iyi. –

+10

Özel bir operatör yazabilirseniz bile, herkese bir iyilik yapın ve bunu yapma.'b =! b' dili anlayan herkes için deyimseldir. – Joel

+0

belki threadAlive gibi bir şey olurdu! Bu harika olurdu. Özel bir operatör nasıl yazabilirim? herhangi bir yardım? – user1046403

4

Çok basit:

threadAlive = ! threadAlive; 
12

Bu yapacağını:

threadAlive = !threadAlive; 

doğru terimKullanım Toggle

7

mantıksal DEĞİL operatörü ! onun işlenen reddeden bir tekli bir operatördür. bool için tanımlanan ve işlenen false ve false ancak ve ancak ve işlenen true yalnızca eğer true döndürür:

threadAlive = !threadAlive; 
13

Evet, var!

threadAlive ^= true; 

(bu bir C# şaka en genel durumda,// ​​JavaScript (o C iş/C++/JavaScript bazı koşullara bağlı olarak), ama olabilir ++ var C C çalışmaz vardır true! ^, xor işlecidir)

+0

Bunun C# 'da çalışmasını beklemiyordum, ama öyle. Yaratıcılık için +1. –

+0

Kötü bir şaka, çünkü 'threadAlive' türü belirtilmemişti. Bu, "int" değerlerinin _majority_i için "doğru" olmamaya neden olur, örn. – sehe

+0

@sehe Bir "C#" etiketi var. Ancak diller hakkında bir not ekledi. – xanatos

3

Temel türler için aradığınız şey bu değilse, overload operators yapamazsınız. Ben, tavsiye kendi bool tipini yaratmak ve seni ++ ya da her türlü operatörünü aşırı asla bir şey olsa, sen ancak can

threadAlive = !threadAlive; 

:

herkes önce bahsedildiği gibi

, bu kadar en iyi seçenek Değerinizi tersine çevirmek dileğiyle.

Aşağıdaki kod zaten kullanılmalıdır asla bir şeydir:

public class MyBool 
{ 
    bool Value; 

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

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

Ayrıca kendi uzantısı yöntemi oluşturabilir ama bu da daha iyi bir yolu olabilir olmayacaktır.

İlgili konular