什么是 | = (单管相等)和 & = (单与号相等)的意思

以下几行:

//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;

在 C # 中,|=(单管相等)和 &=(单符号相等)是什么意思?

我想删除系统属性与保持其他..。

125161 次浏览

他们是 复合任务操作员,翻译(非常松散)

x |= y;

进入

x = x | y;

&也是如此。在一些情况下,关于隐式强制转换有更多的细节,目标变量只计算一次,但这基本上是它的要点。

在非复合算子方面,&是位“ AND”|是位“ OR”

编辑: 在这种情况下,你想要 Folder.Attributes &= ~FileAttributes.System。要理解为什么:

  • ~FileAttributes.System表示“所有属性 除了 System”(~是按位的 NOT)
  • &表示“结果是操作数两边出现的所有属性”

所以它基本上就是一个掩码—— 只有保留了那些出现在(“除了系统以外的所有东西”)中的属性。一般来说:

  • |=将永远只有 位的目标
  • &=将永远只从目标 拿开

除了 a只计算一次之外,a |= b等价于 a = a | b
除了 a只计算一次之外,a &= b等价于 a = a & b

若要在不更改其他位的情况下删除系统位,请使用

Folder.Attributes &= ~FileAttributes.System;

~是位负数。因此,除了 System 位之外,所有位都将设置为1。使用掩码将 System 设置为0并保留所有其他位完整,因为对于任何 x来说,0 & x = 01 & x = x都是完整的

我想删除系统属性与保持其他. 。

你可以这样做:

Folder.Attributes ^= FileAttributes.System;