100 votes

ce n' |= (seul tuyau d'égalité) et &=(seul esperluette égal) signifie en c# (csharp)

dans les lignes ci-dessous :

//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 - |= (seul tuyau d'égalité) et &= (unique esperluette égal) signifie en c#
je souhaite supprimer l'attribut système à garder les autres...

merci d'avance

135voto

Jon Skeet Points 692016

Ils sont composés d'affectation des opérateurs, de la traduction (très vaguement)

x |= y;

en

x = x | y;

et de même pour &. Il y a un peu plus de détails dans quelques cas concernant un cast implicite, et la variable cible est évalué seulement une fois, mais c'est en gros l'essentiel.

En termes de non-opérateurs composés, & est un bit à bit "ET" et | est un bit à bit "OU".

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

  • ~FileAttributes.System signifie "tous les attributs sauf System" (~ est un bit à bit-PAS)
  • & "signifie" le résultat est que tous les attributs qui se produisent sur les deux côtés de l'opérande"

Il est donc essentiel d'agir comme un masque, seulement à conserver les attributs qui apparaissent dans ("tout sauf le Système"). En général:

  • |= ne jamais ajouter des bits de la cible
  • &= ne jamais supprimer les bits de la cible

31voto

Armen Tsirunyan Points 59548

a |= b est équivalent à a = a | b sauf qu' a est évaluée qu'une seule fois
a &= b est équivalent à a = a & b sauf qu' a est évaluée qu'une seule fois

Afin de supprimer les bits du Système sans modifier les autres bits, utilisez

Folder.Attributes &= ~FileAttributes.System;

~ est négation binaire. Vous pouvez donc régler tous les bits à 1, à l'exception du Système de bits. and-ing avec le masque de Système d'ensemble de 0 et de laisser tous les autres bits intacts, car 0 & x = 0 et 1 & x = x pour toute x

3voto

Chris S Points 32376

Je souhaite supprimer l'attribut système avec le maintien de la les autres..

Vous pouvez le faire comme ceci:

Folder.Attributes ^= FileAttributes.System;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X