J'ai un enum comme:
public enum Blah
{
RED = 2,
BLUE = 4,
GREEN = 8,
YELLOW = 16
}
Blah colors = Blah.RED | Blah.BLUE | Blah.YELLOW;
Comment puis-je supprimer la couleur bleue des couleurs variables?
J'ai un enum comme:
public enum Blah
{
RED = 2,
BLUE = 4,
GREEN = 8,
YELLOW = 16
}
Blah colors = Blah.RED | Blah.BLUE | Blah.YELLOW;
Comment puis-je supprimer la couleur bleue des couleurs variables?
Pensé que cela pourrait être utile pour d'autres personnes que suis tombé ici, comme moi.
Attention, la façon dont vous gérer toutes les valeurs de l'enum de ce que vous pourriez avoir une valeur == 0 (parfois, il peut être utile de demander à un Inconnu ou à l'état Inactif pour un enum). Il provoque des problèmes lors de l'utilisation de ces opérations de manipulation des bits.
Aussi quand vous avez les valeurs de l'enum qui sont des combinaisons d'autres puissance de 2 valeurs, par exemple
public enum Colour
{
None = 0, // default value
RED = 2,
BLUE = 4,
GREEN = 8,
YELLOW = 16,
Orange = 18 // Combined value of RED and YELLOW
}
Dans ces cas, la méthode d'extension comme cela pourrait être utile:
public static Colour UnSet(this Colour states, Colour state)
{
if ((int)states == 0)
return states;
if (states == state)
return Colour.None;
return states & ~state;
}
Et aussi l'équivalent IsSet méthode qui traite les valeurs combinées (quoique un peu à l'hacky façon)
public static bool IsSet(this Colour states, Colour state)
{
// By default if not OR'd
if (states == state)
return true;
// Combined: One or more bits need to be set
if( state == Colour.Orange )
return 0 != (int)(states & state);
// Non-combined: all bits need to be set
return (states & state) == state;
}
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.