什么?=(单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 = 01 & x = x对于任何x

我想删除系统属性与其他人..

你可以这样做:

 Folder.Attributes ^= FileAttributes.System;