什么?=(单pipe相等)和&=(单个&符相等)的意思
在下面的行中:
//Folder.Attributes = FileAttributes.Directory | FileAttributes.Hidden | FileAttributes.System | FileAttributes.ReadOnly; Folder.Attributes |= FileAttributes.Directory | FileAttributes.Hidden | FileAttributes.System | FileAttributes.ReadOnly; Folder.Attributes |= ~FileAttributes.System; Folder.Attributes &= ~FileAttributes.System;
什么? |=
(单pipe等于)和&=
(单&符相等)在c#
我想删除系统属性与保持其他…
提前致谢
他们是复合赋值操作符,翻译(非常松散)
x |= y;
成
x = x | y;
和&
相同。 关于隐式转换,在一些情况下有更多的细节,目标variables只被评估一次,但这基本上是它的要点。
对于非复合运算符, &
是按位与“AND”和|
是一个按位“或” 。
编辑:在这种情况下,你想Folder.Attributes &= ~FileAttributes.System
。 要理解为什么:
-
~FileAttributes.System
意思是“ 除System
以外的所有属性”(~
是一个按位 – 不) -
&
意思是“结果是操作数两边出现的所有属性”
所以它基本上是作为一个面具 – 只保留出现在(“除系统之外的所有东西”)属性。 一般来说:
-
|=
只会将位添加到目标 -
&=
只会删除目标位
-
|
是按位还是 -
&
是按位和
a |= b
相当于a = a | b
a = a | b
除了a
只评估一次
a &= b
相当于a = a & b
除了a
只被评估一次
为了在不更改其他位的情况下移除系统位,请使用
Folder.Attributes &= ~FileAttributes.System;
~
是按位否定。 您将因此将所有位设置为1,除了系统位。 and
掩码将设置系统为0和所有其他位保持不变,因为0 & x = 0
和1 & x = x
对于任何x
我想删除系统属性与其他人..
你可以这样做:
Folder.Attributes ^= FileAttributes.System;