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
284 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:

[Flags]
public enum Options
{
    None = 0,
    Option1 = 1,
    Option2 = 2,
    Option3 = 4,
    Option4 = 8
}
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:

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"
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:

[Flags]
public enum MyColors
{
    Yellow,  // 0
    Green,   // 1
    Red,     // 2
    Blue     // 3
}
Copier après la connexion

Utilisation correcte:

[Flags]
public enum MyColors
{
    Yellow = 1,
    Green = 2,
    Red = 4,
    Blue = 8
}
Copier après la connexion

Pour vérifier si un drapeau est défini, utilisez HasFlag() (pour .net 4 et plus tard):

if (myProperties.AllowedColors.HasFlag(MyColor.Yellow))
{
    // Yellow is present
}
Copier après la connexion

ou, pour les anciennes versions .NET, utilisez le bit et l'opérateur:

if ((myProperties.AllowedColors & MyColor.Yellow) == MyColor.Yellow)
{
    // Yellow is present
}
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!

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