【发布时间】:2013-08-03 19:21:22
【问题描述】:
这对你来说可能听起来很奇怪,但我懒得每次都写
if (threadAlive)
{
threadAlive = false;
}
else
{
threadAlive = true;
}
难道没有类似 int++ 或 int-- 的东西可以将 bool 值更改为与其值相反的值吗?
【问题讨论】:
这对你来说可能听起来很奇怪,但我懒得每次都写
if (threadAlive)
{
threadAlive = false;
}
else
{
threadAlive = true;
}
难道没有类似 int++ 或 int-- 的东西可以将 bool 值更改为与其值相反的值吗?
【问题讨论】:
这样做:
threadAlive = !threadAlive;
【讨论】:
b = !b 对任何了解该语言的人来说都是惯用的。
bool 不是。 (当然,在任何一种语言中,您都可以编写一个宏来执行此操作。这种技术通常被称为混淆。)
是的,有!
threadAlive ^= true;
(这是一个 C# 笑话,在大多数情况下,它在 C/C++/Javascript 中不起作用(根据某些条件,它可以在 C/C++/Javascript 中起作用),但是是真的!^ 是异或运算符)
【讨论】:
threadAlive 的类型。这将导致"not true" 对于int 的大部分 值是“真”,例如
C# 标签。但添加了关于语言的注释。
threadAlive 的类型为 bool (并且由于他在 if 中使用它作为条件,这应该是一个安全的假设——尽管该语言确实允许其他类型,通过隐式转换,我什至看到一些程序员使用它们)。
【讨论】:
逻辑否定运算符! 是一个对其操作数取反的一元运算符。它是为bool 定义的,当且仅当它的操作数是false 和false 当且仅当它的操作数是true 时才返回true:
threadAlive = !threadAlive;
【讨论】:
使用! 运算符:
bool b = true;
b = !b; // b is now false
【讨论】:
如果你正在寻找基本类型,你不能overload operators。
正如其他人已经提到的,这是迄今为止你最好的选择:
threadAlive = !threadAlive;
但是,您可以创建自己的 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;
}
}
您也可以创建自己的扩展方法,但这也不是更好的方法。
【讨论】:
很简单:
threadAlive = ! threadAlive;
【讨论】: