Verwenden Sie die C#-Aufzählung [Flags], um Bitoperationen auszuführen
Aufzählungen mit dem Attribut [Flags] ermöglichen die Manipulation einzelner Bits in der zugrunde liegenden Ganzzahldarstellung. Dies ermöglicht eine prägnante Darstellung von Bitmasken, wobei jedes Bit ein bestimmtes Flag oder eine bestimmte Option darstellt.
Bit setzen
Um ein Bit in der [Flags]-Enumeration festzulegen, verwenden Sie den bitweisen ODER-Operator (|):
<code class="language-csharp">flags = flags | FlagsEnum.Bit4; // 设置位 4</code>
Testposition
Um zu testen, ob ein Bit gesetzt ist, verwenden Sie den bitweisen UND-Operator (&):
<code class="language-csharp">bool isBit4Set = (flags & FlagsEnum.Bit4) != 0;</code>
Position umschalten
Um ein Bit umzuschalten (setzen, wenn nicht gesetzt, löschen, wenn gesetzt), verwenden Sie den bitweisen XOR-Operator (^):
<code class="language-csharp">flags = flags ^ FlagsEnum.Bit4; // 切换位 4</code>
Bit löschen
Um Bits zu löschen, verwenden Sie den bitweisen UND-Operator (&) und das Komplement der Bitmaske:
<code class="language-csharp">flags = flags & ~FlagsEnum.Bit4; // 清除位 4</code>
Benutzerdefinierte Erweiterungsmethode
Der Einfachheit halber können die folgenden Erweiterungsmethoden definiert werden, um diese Vorgänge zu vereinfachen:
<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>
Diese Erweiterungsmethoden können wie folgt verwendet werden:
<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>
Das obige ist der detaillierte Inhalt vonWie führe ich bitweise Operationen an C#-[Flags]-Enums durch?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!