Heim > Backend-Entwicklung > C++ > Wie führe ich bitweise Operationen an C#-[Flags]-Enums durch?

Wie führe ich bitweise Operationen an C#-[Flags]-Enums durch?

Patricia Arquette
Freigeben: 2025-01-13 11:37:44
Original
718 Leute haben es durchsucht

How to Perform Bitwise Operations on C# [Flags] Enums?

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage