Ändern von Bool-Werten in das Gegenteil des Anfangswerts

Lesezeit: 3 Minuten

Das klingt vielleicht seltsam für Sie, aber ich bin zu faul, um jedes Mal so etwas zu schreiben

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

gibt es nicht so etwas wie int++ oder int– um den bool-Wert in das Gegenteil seines Wertes zu ändern?

  • Mögliches Duplikat von Can I ‘invert’ a bool?

    – ShooShoSha

    5. Dezember 2016 um 17:23 Uhr

Mach einfach das:

threadAlive = !threadAlive;

  • @user1046403 in C/C++ könnten Sie möglicherweise einen benutzerdefinierten Operator schreiben, der es einfacher macht, in C# ist dies so gut wie es nur geht.

    – pswg

    2. August 2013 um 13:40 Uhr

  • Selbst wenn Sie einen benutzerdefinierten Operator schreiben können, tun Sie allen einen Gefallen und tun Sie das nicht. b = !b ist idiomatisch für jeden, der die Sprache versteht.

    – Joel

    2. August 2013 um 13:41 Uhr

  • vielleicht wenn es sowas wie threadAlive geben würde!! das wäre super. Wie könnte ich einen benutzerdefinierten Operator schreiben? irgendeine Hilfe?

    – Benutzer1046403

    2. August 2013 um 13:42 Uhr

  • Ihr Problem wurde gelöst. Versuchen Sie nicht, es noch schlimmer zu machen. (Bitte holen Sie sich auch etwas Lernmaterial für C oder C++ oder C# oder was auch immer Sie lernen)

    – R.Martinho Fernandes

    2. August 2013 um 13:43 Uhr


  • @ user1046403 Das Schreiben eines benutzerdefinierten Operators ist eine ganz andere Frage. 1) Wählen Sie eine Sprache aus, 2) Recherchieren Sie, 3) Probieren Sie etwas aus. 4) Wenn Sie Probleme haben, stellen Sie dies als neue Frage zu SO.

    – pswg

    2. August 2013 um 13:48 Uhr

Benutzer-Avatar
xanatos

Ja da ist!

threadAlive ^= true;

(Dies ist ein C#-Witz, im allgemeinsten Fall funktioniert es nicht in C/C++/Javascript (it könnte funktionieren in C/C++/Javascript abhängig von einigen Bedingungen), aber es ist wahr! ^ ist der xor-Operator)

  • Ich hatte nicht erwartet, dass das in C# funktioniert, aber es funktioniert. +1 für Einfallsreichtum.

    – pswg

    2. August 2013 um 13:43 Uhr

  • Es ist ein schlechter Witz, weil die Art von threadAlive wurde nicht angegeben. Dies würde führen "not true" für die “wahr” sein mehrheitlich von Werten für intz.B

    – sehen

    2. August 2013 um 13:44 Uhr


  • @sehe Es gibt eine C# Schild. Aber eine Anmerkung zu den Sprachen hinzugefügt.

    – xanatos

    2. August 2013 um 13:46 Uhr


  • Es sollte auch in C++ funktionieren, vorausgesetzt threadAlive Typ hat bool (und da er es als Bedingung in einer ifdas sollte eine sichere Annahme sein – obwohl die Sprache andere Typen mit impliziter Konvertierung zulässt, und ich habe sogar gesehen, dass einige Programmierer sie verwenden).

    – James Kanze

    2. August 2013 um 13:49 Uhr

  • @sehe Die ursprüngliche Frage ist mit einem booleschen Tag gekennzeichnet, daher denke ich, dass dies eine faire Annahme ist. Glaube nicht, dass er die Frage überhaupt neu definiert hat, auch dies ist die eleganteste Lösung.

    – Tuseau

    14. Juli 2015 um 7:31 Uhr

Das würde es tun:

threadAlive = !threadAlive;

Der richtige Begriff ist Umschalten

Benutzer-Avatar
Kyle_the_hacker

Der logische Negationsoperator ! ist ein unärer Operator, der seinen Operanden negiert. Es ist definiert für bool und kehrt zurück true genau dann, wenn sein Operand ist false und false genau dann, wenn sein Operand ist true:

threadAlive = !threadAlive;

Verwenden Sie die ! Operator:

bool b = true;

b = !b;   // b is now false

Benutzer-Avatar
Wadim Owtschinnikow

Du kannst nicht Operatoren überladen für grundlegende Typen, wenn Sie danach suchen.

Wie alle anderen bereits erwähnt haben, ist dies bei weitem die beste Option:

threadAlive = !threadAlive;

Sie können jedoch, obwohl ich das niemals empfehlen würde, Ihre eigenen erstellen bool Typ und überladen die ++ oder welchen Operator Sie Ihren Wert umkehren möchten.

Der folgende Code ist etwas, das sollte noch nie trotzdem verwendet werden:

public class MyBool
{
    bool Value;

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

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

Sie können auch Ihre eigene Erweiterungsmethode erstellen, aber das ist auch kein besserer Weg.

Benutzer-Avatar
piokuc

Sehr einfach:

threadAlive = ! threadAlive;

1381840cookie-checkÄndern von Bool-Werten in das Gegenteil des Anfangswerts

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy