将布尔值更改为与初始值相反
Posted
技术标签:
【中文标题】将布尔值更改为与初始值相反【英文标题】:Changing bool values to opposite of the initial value 【发布时间】:2013-08-03 19:21:22 【问题描述】:这对你来说可能听起来很奇怪,但我懒得每次都写
if (threadAlive)
threadAlive = false;
else
threadAlive = true;
难道没有类似 int++ 或 int-- 的东西可以将 bool 值更改为与其值相反的值吗?
【问题讨论】:
Can I 'invert' a bool?的可能重复 【参考方案1】:这样做:
threadAlive = !threadAlive;
【讨论】:
@user1046403 在 C / C++ 中,您可以编写一个自定义运算符,使其更简单,在 C# 中,这已经足够了。 即使您可以编写自定义运算符,也请帮大家一个忙,不要这样做。b = !b
对任何了解该语言的人来说都是惯用的。
也许会有类似 threadAlive 的东西!!那将是真棒。我怎么能写一个自定义运算符?有什么帮助吗?
您的问题已解决。不要试图让它变得更糟。 (另外,请为 C 或 C++ 或 C# 或任何您正在学习的任何一种选择一些学习材料)
@p.s.w.g 在 C 中,没有自定义运算符。在 C++ 中,自定义运算符的至少一个参数必须是用户定义类型,或对用户定义类型的引用,bool
不是。 (当然,在任何一种语言中,您都可以编写一个宏来执行此操作。这种技术通常被称为混淆。)【参考方案2】:
是的,有!
threadAlive ^= true;
(这是一个 C# 笑话,在大多数情况下,它在 C/C++/javascript 中不起作用(根据某些条件,它可以在 C/C++/Javascript 中起作用),但是是真的!^
是异或运算符)
【讨论】:
我没想到它可以在 C# 中工作,但确实如此。为独创性 +1。 这是个糟糕的笑话,因为没有指定threadAlive
的类型。这将导致"not true"
对于int
的大部分 值是“真”,例如
@sehe 有一个C#
标签。但添加了关于语言的注释。
它也应该在 C++ 中工作,前提是 threadAlive
的类型为 bool
(并且由于他在 if
中使用它作为条件,这应该是一个安全的假设——尽管该语言确实允许其他类型,通过隐式转换,我什至看到一些程序员使用它们)。
@sehe 原始问题标有布尔标记,所以我认为这是一个公平的假设。不要以为他重新定义了问题,这也是最优雅的解决方案。【参考方案3】:
这样就可以了:
threadAlive = !threadAlive;
正确的词是Toggle
【讨论】:
【参考方案4】:逻辑否定运算符!
是一个对其操作数取反的一元运算符。它是为bool
定义的,当且仅当它的操作数是false
和false
当且仅当它的操作数是true
时才返回true
:
threadAlive = !threadAlive;
【讨论】:
【参考方案5】:使用!
运算符:
bool b = true;
b = !b; // b is now false
【讨论】:
【参考方案6】:如果你正在寻找基本类型,你不能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;
您也可以创建自己的扩展方法,但这也不是更好的方法。
【讨论】:
【参考方案7】:很简单:
threadAlive = ! threadAlive;
【讨论】:
以上是关于将布尔值更改为与初始值相反的主要内容,如果未能解决你的问题,请参考以下文章