C# Set Flag Enum verstehen: Flaggen zuweisen
Bei der Arbeit mit Berechtigungen, Konfigurationen oder Einstellungen in C# gibt es häufig Situationen, in denen mehrere Werte in einer einzigen Variablen gespeichert werden müssen. Anstatt separate boolesche Werte für jede Einstellung zu verwenden, können wir Flag Enums verwenden. Diese Methode nutzt binäre Operationen, um mehrere Optionen innerhalb eines einzigen Integer-Wertes effizient zu verwalten.
In diesem Artikel werden wir einen tieferen Blick auf das Setzen von Flag Enums in C# werfen, basierend auf dem Video von Tim Corey, Binary in C#: Assigning Flags in 10 Minutes or Less. Tim zeigt, wie man mehrere Werte mithilfe von Binäroperationen zuweist und so den Code effizienter und lesbarer macht. Lassen Sie uns eintauchen.
Einführung in Flag Enums
Tim beginnt mit der Erklärung, dass diese Lektion Teil einer Reihe zum Verständnis von Binärdateien in C# ist. In diesem Video konzentriert er sich auf die Zuweisung von Flags mithilfe von Binäroperationen. Flags ermöglichen es uns, mehrere Werte in einer einzigen Ganzzahl zu speichern, wodurch die Verwaltung von Berechtigungen viel einfacher und effizienter wird.
Mehrere Flags mit Bitwise OR zuweisen
Tim demonstriert, wie wir mehrere Berechtigungen mit dem bitweisen ODER (|) Operator. Er erstellt eine Enumeration SystemPermissions, die verschiedene Berechtigungsstufen wie SQL, Redis und BuildSystem umfasst. Anstatt mehrere Variablen zu verwenden, können wir alle Berechtigungen in einem einzigen Wert speichern.
Beispiel für die Zuweisung mehrerer Berechtigungen an eine Variable:
// Assume that SystemPermissions is an enum with values SQL, Redis, and BuildSystem
SystemPermissions TimPermissions = SystemPermissions.SQL | SystemPermissions.Redis;
// Print the current permissions - it will include both SQL and Redis
Console.WriteLine(TimPermissions);
// Assume that SystemPermissions is an enum with values SQL, Redis, and BuildSystem
SystemPermissions TimPermissions = SystemPermissions.SQL | SystemPermissions.Redis;
// Print the current permissions - it will include both SQL and Redis
Console.WriteLine(TimPermissions);
Binärdarstellung anzeigen
Um besser zu verstehen, was passiert, schlägt Tim vor, den ganzzahligen Wert mithilfe von Convert.ToString(value, 2) in seine Binärform zu konvertieren. So können wir visualisieren, welche Bits gesetzt sind:
// Convert the permissions to a binary string to see the set bits
Console.WriteLine(Convert.ToString((int)TimPermissions, 2));
// Convert the permissions to a binary string to see the set bits
Console.WriteLine(Convert.ToString((int)TimPermissions, 2));
Dies zeigt, dass verschiedene Bitpositionen verschiedenen Berechtigungen entsprechen, und demonstriert, wie wir mehrere Einstellungen in einer Ganzzahl speichern können.
Hinzufügen weiterer Berechtigungen mit OR-Equals
Tim erklärt, dass wir weitere Berechtigungen dynamisch hinzufügen können, indem wir die |=-Operator:
// Add the BuildSystem permission to the existing permissions
TimPermissions |= SystemPermissions.BuildSystem;
// Print the updated permissions - it now includes SQL, Redis, and BuildSystem
Console.WriteLine(TimPermissions);
// Add the BuildSystem permission to the existing permissions
TimPermissions |= SystemPermissions.BuildSystem;
// Print the updated permissions - it now includes SQL, Redis, and BuildSystem
Console.WriteLine(TimPermissions);
Die 32-Bit-Grenze verstehen
Tim weist auf eine wichtige Überlegung hin: Der Datentyp Integer in C# hat eine 32-Bit-Grenze. Das bedeutet, dass wir nur bis zu 32 eindeutige Flags in einem int speichern können. Wenn wir mehr als 32 Flags benötigen, sollten wir in Betracht ziehen, einen long (64-Bit) oder sogar mehrere Werte zu verwenden. In den meisten Fällen sind 32 Zeichen jedoch mehr als genug.
Flags in einer Datenbank speichern
Einer der größten Vorteile der Verwendung von Flag-Enums ist, dass sie effizient in einer Datenbank gespeichert werden können. Anstatt mehrere boolesche Spalten zu speichern, können wir einen einzigen Integer-Wert speichern, der alle Berechtigungen repräsentiert. Tim erklärt, dass dieser Ansatz die Komplexität der Datenbank und die Speicheranforderungen erheblich reduziert.
Zum Beispiel, wenn TimPermissions als 37 gespeichert wird, stellt es eine Kombination aus:
- SQL (Bit 1)
- Redis (Bit 3)
- BuildSystem (Bit 5)
Wenn wir diesen Wert aus der Datenbank abrufen, können wir ihn leicht entschlüsseln, um die aktiven Berechtigungen zu bestimmen.
Abschluss
Abschließend hebt Tim die Leistungsfähigkeit von Flag Enums hervor. Mit binären Operationen können wir mehrere Zustände innerhalb einer einzigen Ganzzahl effizient verwalten. Diese Technik verbessert die Leistung, vereinfacht die Datenspeicherung und macht unseren Code besser lesbar.
Wenn Sie diesen Ansatz verfolgen, können Sie ein sauberes, skalierbares Berechtigungsverwaltungssystem mit C# Flag Enums implementieren. Sehen Sie sich das vollständige Video an, um ein besseres Verständnis zu erhalten.
