我做..布尔变量翻转
item.IsEnabled = !item.IsEnabled;
有没有一种更简洁的方式例如
someInteger++;
想象:
thisIsAnExceptionallyLongNamedVariable.IsSomeBooleanValue = !thisIsAnExceptionallyLongNamedVariable.IsSomeBooleanValue
我做..布尔变量翻转
item.IsEnabled = !item.IsEnabled;
有没有一种更简洁的方式例如
someInteger++;
想象:
thisIsAnExceptionallyLongNamedVariable.IsSomeBooleanValue = !thisIsAnExceptionallyLongNamedVariable.IsSomeBooleanValue
item.IsEnabled ^= true;
(^=
是异或(XOR)操作者由于true^true==false
和false^true==true
,上述具有反转的效果。)
翻转布尔值而仅使用变量名称的唯一方法是(雅各·克劳显示):
myBool ^= true; // flip the value
无论是可读与否是值得商榷的,但大多数人认为它是不。 (可读性可能与像上面一个小评论略有改善)
其它变体包括:
myBool = !myBool; // preferred, in my opinion
和
myBool = myBool == false;
关于多线程旁注:值得注意的是,如果像a.B
这样的财产访问,只有^= true
免疫多重在作业中间a
的值可能会改变的ading问题(但不太可能)。
查看生成的IL,上述版本之间的唯一区别是,编译器在后两个版本中加载值为a
两次。但是,前者只加载一次,然后将值复制到评估堆栈中。因此,保证将属性值设置到它从中读取值的同一对象上。另一方面,其他人可能会从一个对象读取值,并将翻转的值设置到另一个对象(在这些不太可能的情况下)。
不,没有。这就是说 - 你能提供更多的上下文吗? – 2014-09-01 04:45:46
你为什么要这样做? – Pietu1998 2014-09-01 04:46:30
如果我读了'IsEnabled',我会认为这是一个只读属性 - 为什么我会设置** IsEnabled或从外部切换它? – Carsten 2014-09-01 04:47:16