30

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

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

是不是有类似 int++ 或 int-- 的东西可以将 bool 值更改为与其值相反的值?

4

7 回答 7

77

只需这样做:

threadAlive = !threadAlive;
于 2013-08-02T13:38:02.320 回答
17

就在这里!

threadAlive ^= true;

(这是一个 C# 玩笑,在最一般的情况下,它在 C/C++/Javascript 中不起作用(根据某些条件,它可以在 C/C++/Javascript 中起作用),但这是真的!^是 xor 运算符)

于 2013-08-02T13:41:48.647 回答
16

这会做到:

threadAlive = !threadAlive;

正确的术语是切换

于 2013-08-02T13:38:19.920 回答
10

逻辑否定运算符!是一个对其操作数取反的一元运算符。当且仅当它的操作数是并且当且仅当它的操作数是 时,它才被定义bool并返回:truefalsefalsetrue

threadAlive = !threadAlive;
于 2013-08-02T13:41:06.413 回答
6

使用!运算符:

bool b = true;

b = !b;   // b is now false
于 2013-08-02T13:38:24.220 回答
6

如果您正在寻找基本类型,则不能重载运算符。

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

threadAlive = !threadAlive;

bool但是,您可以创建自己的类型并重载 the++或任何您希望反转值的运算符,尽管这是我绝不推荐的。

以下代码无论如何都不应该使用:

public class MyBool
{
    bool Value;

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

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

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

于 2013-08-05T15:06:28.880 回答
5

很简单:

threadAlive = ! threadAlive;
于 2013-08-02T13:38:06.333 回答