切换bool成员的更好的代码

时间:2012-10-05 17:27:40

标签: c#

请注意,问题不在于否定布尔值,而在于最优雅,最有效和最好的方式。

点击切换按钮后,我执行以下代码将新状态存储在私人bool中。

_isIt = !_isIt;

确实有效。这是可读的,当然。但i = i + 1也是如此,我们总是写i++。有没有更简洁的方法来切换bool

5 个答案:

答案 0 :(得分:26)

实际上还有另一个选项来切换布尔值,这将起作用:

_isIt ^= true;

然而,这并不比你做的更好......

答案 1 :(得分:18)

没有。这是最佳方式。恭喜!

即便如此也会有另一种方式(正如您评论的那样 - _isIt!!),我相信最好不要使用它,因为你会提高很多无论如何,眼睛都会浏览。

答案 2 :(得分:3)

不,我相信这是切换bool的惯用C#方式(即将其指定为相反的值)。

我的意见:保持你的代码不变。它清楚地传达了代码的意图,这对未来的读者来说是最重要的。

如果您对替代的方式感兴趣,可以使用XOR,但我认为它的可读性较差。

_isIt ^= true;

答案 3 :(得分:1)

不,没有。我不知道还有什么可以添加到这个答案:)

答案 4 :(得分:1)

快速笔记

尽管答案已经被接受,但我认为更深入的答案将对将来的读者有所帮助。如本文所指出,!NOT运算符是最广泛接受的最佳解决方案。实际上,与^XOR相比,经过10,000次迭代,速度大约快了100ms。用法都取决于情况。无论哪种方式,下面都会找到三种最常见的切换bool值的方法,并且应该在允许使用的标准内选择最适合使用的方法。


if-else方法

切换bool值的最简单方法是写出一个分配新值的if-else。这样,即使是完整的开发新手也可以了解发生了什么。实际上,这是大多数概念课中教授切换的方式。

bool b = true;
if (b == true)
    b = false;
else
    b = true;

当然可以将if简化为if (b),但是传统上,为了清晰和学习目的,您将一路写出来。


NOT运算符

随着您了解有关开发和逻辑运算的更多信息,您将了解NOT中的!运算符或C#。由于多种原因,该运算符的使用在业界最广泛接受。它很简单,很容易阅读,很容易理解,而且很快:

x != x
x = !x;

这分为!true = false!false = true


XOR运算符

XOR中的^C#是此任务选择较少的运算符,但根据情况,它是可接受的运算符。正如一些评论中指出的那样,该运算符在处理长名称或深度访问成员时特别有用。如果性能很重要,并且该操作将多次执行,则最好与NOT运算符一起使用,因为它更快。如果性能并不是真正的问题,那么可以使用XOR运算符;但是在专业环境中,您可能需要证明其用法合理。

b ^= true;
b = b ^ true;

在使用XOR进行切换之前,最要了解的是了解其在逻辑上的工作方式:

true ^ false = true;
true ^ true = false;
false ^ true = true;
false ^ false = false;

该逻辑表解释了为什么b ^= false无法切换。 XOR要求运算符的一侧为true,另一侧为false。哪一侧无关紧要,但是哪一侧都不能具有相同的值,否则它将求值为false。因此:

bool b = true;
b ^= false; // true.
b ^= false; // true. So on, and so forth.

bool b = false;
b ^= false; // false.
b ^= false; // false. So on, and so forth.

最终思想

OP的问题的答案很简单:

  • NOT运算符是最干净,最有效的切换解决方案。

我希望您在未来的工作中一切顺利,希望此回答有助于进一步阐明该主题!