39 votes

Pourquoi utiliser l'opérateur << dans une déclaration d'un enum ?

Je regardais le code que j'ai actuellement dans mon projet et j'ai trouvé quelque chose comme ceci :

public enum MyEnum
{
    open     = 1 << 00,
    close    = 1 << 01,
    Maybe    = 1 << 02,
    ........
}

Le site << est l'opérande de décalage, qui décale le premier opérande vers la gauche du nombre de bits spécifié dans le second opérande.

Mais pourquoi quelqu'un utiliserait-il cela dans un enum déclaration ?

40voto

Mark Avenius Points 7344

Cela vous permet de faire quelque chose comme ceci :

var myEnumValue = MyEnum.open | MyEnum.close;

sans avoir besoin de compter les valeurs des bits des multiples de 2.

(comme ceci) :

public enum MyEnum
{
    open     = 1,
    close    = 2,
    Maybe    = 4,
    ........
}

22voto

Lee Points 63849

Cette méthode est généralement utilisée avec les champs de bits, car le motif est clair, il n'est pas nécessaire de calculer manuellement les valeurs correctes et le risque d'erreur est donc réduit.

[Flags]
public enum SomeBitField
{
    open = 1 << 0    //1
    closed = 1 << 1  //2
    maybe = 1 << 2   //4
    other = 1 << 3   //8
    ...
}

10voto

Richard Deeming Points 9808

Pour éviter de taper les valeurs d'un Flags enum à la main.

public enum MyEnum
{
    open     = 0x01,
    close    = 0x02,
    Maybe    = 0x04,
    ........
}

6voto

McGarnagle Points 56802

Il s'agit simplement d'une façon plus propre et plus intuitive d'écrire les bits. 1, 2, 3 est une séquence plus lisible par l'homme que 0x1, 0x2, 0x4, etc.

6voto

It'sNotALie. Points 10674

Il s'agit de créer un enum que vous pouvez combiner.

Ce que cela signifie effectivement est ceci :

public enum MyEnum
{
    open = 1;
    close = 2;
    Maybe = 4;
    //...
}

Il s'agit juste d'une méthode plus sûre pour créer un [Flags] enum.

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