Comprendre l'attribut [Flags] dans C # enums
C # Enum, lorsqu'il est orné de l'attribut [Flags]
, passez de la représentation de valeurs uniques en ensembles d'options. Ceci est particulièrement utile lors de l'utilisation d'opérateurs de bit sur le sens du bit. Illustrons:
<code class="language-csharp">[Flags] public enum Options { None = 0, Option1 = 1, Option2 = 2, Option3 = 4, Option4 = 8 }</code>
L'attribut [Flags]
n'activait pas magiquement les opérations bitwise; Sa fonction centrale est d'améliorer la sortie de la méthode ToString()
.
observer la différence:
<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
affiche des drapeaux individuels, tandis que Suits
montre la somme numérique.
crucial, [Flags]
n'attribue pas automatiquement des pouvoirs de deux. Vous devez le faire manuellement pour les opérations correctes sur le sens bit. Utilisation incorrecte:
<code class="language-csharp">[Flags] public enum MyColors { Yellow, // 0 Green, // 1 Red, // 2 Blue // 3 }</code>
Utilisation correcte:
<code class="language-csharp">[Flags] public enum MyColors { Yellow = 1, Green = 2, Red = 4, Blue = 8 }</code>
Pour vérifier si un drapeau est défini, utilisez HasFlag()
(pour .net 4 et plus tard):
<code class="language-csharp">if (myProperties.AllowedColors.HasFlag(MyColor.Yellow)) { // Yellow is present }</code>
ou, pour les anciennes versions .NET, utilisez le bit et l'opérateur:
<code class="language-csharp">if ((myProperties.AllowedColors & MyColor.Yellow) == MyColor.Yellow) { // Yellow is present }</code>
Cela fonctionne parce que les drapeaux sont des pouvoirs de deux:
<code>Yellow: 0001 Green: 0010 Red: 0100 Blue: 1000</code>
Bitwise ou combine des drapeaux; et les isole.
Évitez d'utiliser le bit et vérifiez None = 0
; Ce sera toujours faux. Utilisez une comparaison logique à la place pour voir si des drapeaux sont définis.
L'attribut [Flags]
est un outil puissant pour gérer des ensembles d'options dans C # Enum, en tirant parti des opérations bit
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!