将bool值更改为与初始值相反的值

use*_*403 23 c c# c++ boolean

这对你来说可能听起来很奇怪,但我每次都懒得写

if (threadAlive)
{
            threadAlive = false;
}
        else
{
            threadAlive = true;
}
Run Code Online (Sandbox Code Playgroud)

是不是有像int ++或int--这样的东西将bool值改为与其值相反?

p.s*_*w.g 60

这样做:

threadAlive = !threadAlive;
Run Code Online (Sandbox Code Playgroud)

  • 你的问题已经解决了.不要试图让它变得更糟.(另外,请为C或C++或C#中的一个或任何一个学习材料学习一些学习资料) (15认同)
  • 即使您可以编写自定义运算符,也可以帮助每个人,不要这样做.`b =!b`对于理解该语言的人来说是惯用的. (11认同)

xan*_*tos 15

就在这里!

threadAlive ^= true;
Run Code Online (Sandbox Code Playgroud)

(这是一个C#笑话,在最常见的情况下它不适用于C/C++/Javascript(它可以在C/C++/Javascript中工作,具体取决于某些条件),但它是真的!^是xor运算符)

  • @sehe 原始问题标有布尔标签,所以我认为这是一个公平的假设。完全不要认为他重新定义了问题,这也是最优雅的解决方案。 (2认同)

Hab*_*bib 14

这样做:

threadAlive = !threadAlive;
Run Code Online (Sandbox Code Playgroud)

正确的术语是Toggle


Kyl*_*ker 10

逻辑否定运算符!是一个否定其操作数的一元运算符.它被定义为bool并且true当且仅当它的操作数是,false并且false当且仅当它的操作数是true:

threadAlive = !threadAlive;
Run Code Online (Sandbox Code Playgroud)


oua*_*uah 6

使用!运营商:

bool b = true;

b = !b;   // b is now false
Run Code Online (Sandbox Code Playgroud)


Avr*_*dor 6

如果这是您要查找的内容,则不能重载基本类型的运算符

正如其他人已经提到的,这是迄今为止您最好的选择:

threadAlive = !threadAlive;
Run Code Online (Sandbox Code Playgroud)

但是,虽然我永远不会推荐,但您可以创建自己的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;
    }
}
Run Code Online (Sandbox Code Playgroud)

您也可以创建自己的扩展方法,但这也不是更好的方法。


pio*_*kuc 5

非常简单:

threadAlive = ! threadAlive;
Run Code Online (Sandbox Code Playgroud)