Utilisez l'énumération C# [Flags] pour effectuer des opérations sur les bits
Les énumérations avec l'attribut [Flags] permettent la manipulation de bits individuels dans la représentation entière sous-jacente. Cela permet une représentation succincte des masques de bits, où chaque bit représente un indicateur ou une option spécifique.
Définir le bit
Pour définir un bit dans l'énumération [Flags], utilisez l'opérateur OR au niveau du bit (|) :
<code class="language-csharp">flags = flags | FlagsEnum.Bit4; // 设置位 4</code>
Position d'essai
Pour tester si un bit est défini, utilisez l'opérateur ET au niveau du bit (&) :
<code class="language-csharp">bool isBit4Set = (flags & FlagsEnum.Bit4) != 0;</code>
Basculer la position
Pour basculer un peu (définir s'il n'est pas défini, effacer s'il est défini), utilisez l'opérateur XOR au niveau du bit (^) :
<code class="language-csharp">flags = flags ^ FlagsEnum.Bit4; // 切换位 4</code>
Effacer le bit
Pour effacer des bits, utilisez l'opérateur ET au niveau du bit (&) et le complément du masque de bits :
<code class="language-csharp">flags = flags & ~FlagsEnum.Bit4; // 清除位 4</code>
Méthode d'extension personnalisée
Pour plus de commodité, les méthodes d'extension suivantes peuvent être définies pour simplifier ces opérations :
<code class="language-csharp">public static bool Has<T>(this System.Enum type, T value) { return (((int)(object)type & (int)(object)value) == (int)(object)value); } public static bool Is<T>(this System.Enum type, T value) { return (int)(object)type == (int)(object)value; } public static T Add<T>(this System.Enum type, T value) { return (T)(object)(((int)(object)type | (int)(object)value)); } public static T Remove<T>(this System.Enum type, T value) { return (T)(object)(((int)(object)type & ~(int)(object)value)); }</code>
Ces méthodes d'extension peuvent être utilisées comme suit :
<code class="language-csharp">SomeType value = SomeType.Grapes; bool isGrapes = value.Is(SomeType.Grapes); // true bool hasGrapes = value.Has(SomeType.Grapes); // true value = value.Add(SomeType.Oranges); value = value.Add(SomeType.Apples); value = value.Remove(SomeType.Grapes); bool hasOranges = value.Has(SomeType.Oranges); // true bool isApples = value.Is(SomeType.Apples); // false bool hasGrapes = value.Has(SomeType.Grapes); // false</code>
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!