Heim >Backend-Entwicklung >C++ >Wie verbessert das Attribut [Flags] die Enum -Funktionalität in C#?
Das [Flags] Attribut in C# Enums
verstehen c# Enums, wenn sie mit dem Attribut [Flags]
geschmückt ist, verwandeln Sie sich von der Darstellung einzelner Werte in Optionensätze. Dies ist besonders nützlich, wenn Sie bitweise Betreiber einsetzen. Lassen Sie uns:
<code class="language-csharp">[Flags] public enum Options { None = 0, Option1 = 1, Option2 = 2, Option3 = 4, Option4 = 8 }</code>
Das Attribut [Flags]
aktiviert bitweise Operationen nicht auf magische Weise. Die Kernfunktion besteht darin, die Ausgabe der ToString()
-Methode zu verbessern.
beobachten Sie den Unterschied:
<code class="language-csharp">enum Suits { Spades = 1, Clubs = 2, Diamonds = 4, Hearts = 8 } [Flags] enum SuitsFlags { Spades = 1, Clubs = 2, Diamonds = 4, Hearts = 8 } var str1 = (Suits.Spades | Suits.Diamonds).ToString(); // "5" var str2 = (SuitsFlags.Spades | SuitsFlags.Diamonds).ToString(); // "Spades, Diamonds"</code>
SuitsFlags
Zeigt einzelne Flags an, während Suits
die numerische Summe zeigt.
entscheidend weist [Flags]
keine automatischen Kräfte von zwei zu. Sie müssen dies für korrekte Bitgewise -Operationen manuell tun. Falsche Verwendung:
<code class="language-csharp">[Flags] public enum MyColors { Yellow, // 0 Green, // 1 Red, // 2 Blue // 3 }</code>richtige Verwendung:
<code class="language-csharp">[Flags] public enum MyColors { Yellow = 1, Green = 2, Red = 4, Blue = 8 }</code>Um zu überprüfen, ob ein Flag eingestellt ist, verwenden Sie
(für .NET 4 und später): HasFlag()
<code class="language-csharp">if (myProperties.AllowedColors.HasFlag(MyColor.Yellow)) { // Yellow is present }</code>oder für ältere .NET -Versionen bitweise und operator:
<code class="language-csharp">if ((myProperties.AllowedColors & MyColor.Yellow) == MyColor.Yellow) { // Yellow is present }</code>Dies funktioniert, weil Flags Kräfte von zwei sind:
<code>Yellow: 0001 Green: 0010 Red: 0100 Blue: 1000</code>bitweise oder kombiniert Flags; bitweise und isoliert sie.
vermeiden Sie die Verwendung von Bitweise und nach
zu überprüfen; Es wird immer falsch sein. Verwenden Sie stattdessen einen logischen Vergleich, um festzustellen, ob Flags festgelegt werden. None = 0
ist ein leistungsstarkes Tool zum Verwalten von Optionensätzen in C# Enums und nutzt bitweise Vorgänge für eine effiziente Flag -Manipulation. [Flags]
Das obige ist der detaillierte Inhalt vonWie verbessert das Attribut [Flags] die Enum -Funktionalität in C#?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!