Maison > développement back-end > C++ > Comment l'attribut [Flags] améliore-t-il la fonctionnalité Enum en C #?

Comment l'attribut [Flags] améliore-t-il la fonctionnalité Enum en C #?

Barbara Streisand
Libérer: 2025-02-02 15:01:09
original
199 Les gens l'ont consulté

How Does the [Flags] Attribute Enhance Enum Functionality in C#?

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

Utilisation correcte:

<code class="language-csharp">[Flags]
public enum MyColors
{
    Yellow = 1,
    Green = 2,
    Red = 4,
    Blue = 8
}</code>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

Cela fonctionne parce que les drapeaux sont des pouvoirs de deux:

<code>Yellow: 0001
Green:  0010
Red:    0100
Blue:   1000</code>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal