web-dev-qa-db-fra.com

Modification des valeurs booléennes à l'opposé de la valeur initiale

Cela peut vous sembler étrange mais je suis trop paresseux pour écrire à chaque fois comme

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

n'y a-t-il pas quelque chose comme int ++ ou int-- pour changer la valeur booléenne à l'opposé de sa valeur?

23
user1046403

Faites juste ceci:

threadAlive = !threadAlive;
60
p.s.w.g

Oui il y a!

threadAlive ^= true;

(c'est une blague C #, dans le cas le plus général cela ne fonctionnera pas en C/C++/Javascript (cela pourrait fonctionner en C/C++/Javascript selon certaines conditions), mais c'est vrai! ^ est l'opérateur xor)

15
xanatos

Cela le ferait:

threadAlive = !threadAlive;

Le terme correct est Toggle

14
Habib

L'opérateur de négation logique ! est un opérateur unaire qui annule son opérande. Il est défini pour bool et renvoie true si et seulement si son opérande est false et false si et seulement si son opérande est true:

threadAlive = !threadAlive;
10
Kyle_the_hacker

Utilisez le ! opérateur:

bool b = true;

b = !b;   // b is now false
6
ouah

Très simple:

threadAlive = ! threadAlive;
5
piokuc

Vous ne pouvez pas opérateurs de surcharge pour les types de base si c'est ce que vous recherchez.

Comme tout le monde l'a déjà mentionné, c'est de loin votre meilleure option:

threadAlive = !threadAlive;

Vous pouvez cependant, bien que ce soit quelque chose que je ne recommanderais jamais, créer votre propre type bool et surcharger le ++ ou tout opérateur que vous souhaitez inverser votre valeur.

Le code suivant est quelque chose qui ne devrait jamais être utilisé de toute façon:

public class MyBool
{
    bool Value;

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

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

Vous pouvez également créer votre propre méthode d'extension, mais ce ne sera pas non plus une meilleure façon.

4
Avram Tudor