在C#中,'bool = bool!= true'是什么意思?

时间:2012-03-06 18:35:14

标签: c# boolean-logic

在我寻找帮助解决问题时,我遇到了这个问题:

p.Enabled = p.Enabled != true;

这究竟是什么意思?我以前从未见过它,

nb:前一行是var p = this.PageRepository.GetPage(id);

10 个答案:

答案 0 :(得分:33)

p.Enabled为正常bool时,启用属性通常为

p.Enabled = p.Enabled != true;

相同
p.Enabled = ! p.Enabled;
换句话说,它翻转或翻转p.Enabled

现在,当“已启用”是bool?时,Nullable<bool>的简写,结果不同:

! ((bool?) null)           -> null
((bool?) null) != true     -> true 

因此p.Enabled = p.Enabled != true会在旧值为truefalse时设置null

答案 1 :(得分:32)

这是一个笨拙的bool拨动开关。每次调用都会将状态从true切换为false。我已写完了:

p.Enabled = !p.Enabled;

编辑 - 我想我应该说,只是在我看来写得很尴尬。

答案 2 :(得分:19)

这么多答案......我只是想把它分解一下:

p.Enabled = p.Enabled != true;

在语义上等同于:

var IN = p.Enabled;
var OUT = IN != true;
p.Enabled = OUT;

所以:

p.Enabled -> IN     IN != true      OUT -> p.Enabled
---------------     -------------   ----------------
true                true  != true   false
false               false != true   true
(if nullable) null  null  != true   true

因此,从Truth Table可以看出它与logical not (!) operator相同*并且可以重写为:

p.Enabled = !p.Enabled;

(我认为大多数[有经验的]程序员更喜欢后一种形式,因为它是一种相当常见的习语。)

快乐的编码。


*请注意,在null(又名bool?)类型的情况下,将Nullable<bool>添加为第三个​​输入状态。 (谢谢,托马斯梅菲尔德; - )

答案 3 :(得分:10)

p.Enabled = !p.Enabled;相同,与p.Enabled相反。

答案 4 :(得分:9)

评估测试p.Enabled != true。结果(布尔值)被分配给p.Enabled。因此,如果p.Enabled为真,则p.Enabled将设置为false。另一种说法是p.Enabled = !p.Enabled。也就是说,它基本上颠倒了p.Enabled的价值。

答案 5 :(得分:8)

如果p.Enabled是普通bool,则它等同于p.Enabled = !p.Enabled。即它切换p.Enabled

但如果p.Enabled是可以为空的bool,它会将nullfalse映射到true,并将true映射到false。但在这种情况下,我更愿意写p.Enabled = !(p.Enabled ?? true)

如果p.Enabled是具有重载隐式转换运算符的自定义类型,则可能发生任何事情。

答案 6 :(得分:4)

基本上这会翻转p.Enabled的值。因此,如果它为真,那么p.Enabled != true的计算结果为false,然后将该假值分配给p.Enabled = false。如果p.Enabled是假的,它会反过来工作。

如果它是这样编写的话可能更有意义:

p.Enabled = !(p.Enabled);

答案 7 :(得分:3)

这样想:

p.Enabled = (p.Enabled != true);

现在,(p.Enabled != true)评估为bool,然后可以将其分配给另一个bool变量。

答案 8 :(得分:3)

该行评估p.Enabled != true,如果p.Enabled为真,则为false;如果p.Enabled为false,则为true。换句话说,一种非常尴尬的写作方式

p.Enabled = !p.Enabled

答案 9 :(得分:1)

使用此功能:

bool cond = (p.Enabled != true);
if (cond == true) 
{
  p.Enabled = cond; // = true
}
else
{
  p.Enabled = cond; // = false
}