web-dev-qa-db-fra.com

Que signifient | = (single pipe égal) et & = (single esperluette égale) signifie

En dessous des lignes:

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

Qu'est-ce que |= (tuyau unique égal) et &= _ (simple esperluette égale) moyenne en C #
Je veux supprimer l'attribut système en conservant les autres ...

93
SilverLight

Ils sont affectation composée opérateurs, traduisant (très lâchement)

x |= y;

dans

x = x | y;

et pareil pour &. Il existe un peu plus de détails dans quelques cas concernant un transtypage implicite, et la variable cible n'est évaluée qu'une fois, mais c'est l'essentiel.

En ce qui concerne les opérateurs non composés, & est un "ET" au niveau des bits et | est un "OU" au niveau des bits .

EDIT: Dans ce cas, vous voulez Folder.Attributes &= ~FileAttributes.System. Pour comprendre pourquoi:

  • ~FileAttributes.System signifie "tous les attributs à l'exception de System" (~ est un bitwise-NOT)
  • & signifie "le résultat est tous les attributs qui apparaissent des deux côtés de l'opérande"

Donc, il agit essentiellement comme un masque - seulement conserve les attributs qui apparaissent dans ("tout sauf le système"). En général:

  • |= ne fera que uniquement ajouter bits à la cible
  • &= enlèvera seulement bits de la cible
129
Jon Skeet

a |= b est équivalent à a = a | b sauf que a n’est évalué qu’une fois
a &= b est équivalent à a = a & b sauf que a n’est évalué qu’une fois

Pour supprimer le bit système sans changer les autres bits, utilisez

Folder.Attributes &= ~FileAttributes.System;

~ est une négation au niveau des bits. Vous définissez ainsi tous les bits sur 1 sauf le bit Système. and- avec le masque mettra System à 0 et laissera tous les autres bits intacts car 0 & x = 0 et 1 & x = x pour tout x

31
Armen Tsirunyan

Je veux supprimer l'attribut système tout en conservant les autres ..

Vous pouvez faire ça comme ça:

Folder.Attributes ^= FileAttributes.System;
3
Chris S