Maison > développement back-end > C++ > Comment l'attribut C # [Flags] Enum améliore-t-il les opérations et la lisibilité à l'énumération bit

Comment l'attribut C # [Flags] Enum améliore-t-il les opérations et la lisibilité à l'énumération bit

Barbara Streisand
Libérer: 2025-02-02 14:56:10
original
424 Les gens l'ont consulté

How Does the C# [Flags] Enum Attribute Enhance Bitwise Operations and Enumeration Readability?

[Flags] Attributs énumérés dans [ C #: Comprendre son rôle

Lors de la définition de l'énumération en C #, si l'énumération représente l'ensemble des valeurs plutôt qu'une seule valeur, vous pouvez utiliser la propriété [Flags]. Cet attribut est particulièrement utile dans l'énumération de l'opérateur d'utilisation.

[Flags] L'importance de l'attribut

Contrairement à l'incompréhension universelle, l'attribut [Flags] fournit une forme de représentation plus lisible par la méthode . L'énumération marquée de [Flags] sortira sa valeur, et la valeur est affichée sous la forme d'un signe d'une séparation de virgules.

La valeur de puissance de 2 .ToString()

<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
Il faut souligner que l'attribut [Flags] n'attribue pas automatiquement la valeur de puissance de 2 à l'énumération. Si la valeur de la valeur est ignorée, la maintenance de l'opération en position est incorrecte, car la valeur par défaut augmente à partir de 0.

La déclaration correcte:

Obtenez des valeurs différentes:

Pour récupérer les différentes valeurs dans les attributs d'énumération, vous pouvez utiliser plusieurs méthodes:

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

Utiliser <.> (. Net 4 et versions supérieures disponibles):

    Utilisez l'opérateur de position (avant .net 4):
  • .HasFlag()

    <code class="language-csharp">  if (myProperties.AllowedColors.HasFlag(MyColor.Yellow))
      {
          // Yellow is allowed...
      }</code>
    Copier après la connexion
    Le mécanisme sous-jacent
  • Les propriétés

    [FLAGS] sont autorisées à utiliser des valeurs binaires en fonctionnant par bit Computing. En utilisant la valeur de puissance de 2 comme valeur d'énumération, le binaire sous-jacent de la valeur signifie qu'il permet des calculs efficaces et significatifs.

    <code class="language-csharp">  if ((myProperties.AllowedColors & MyColor.Yellow) == MyColor.Yellow)
      {
          // Yellow is allowed...
      }</code>
    Copier après la connexion
    Par exemple, si l'attribut autorisé utilise le binaire en fonction du bit ou des symboles opérationnels pour être rouges, verts et bleus, alors les permis d'économiser le binaire 00001110.
Aucun = 0 valeur

Dans certaines énumérations, il contient 0 valeurs (généralement nommé "Aucun"). Cependant, il convient de noter que la position et les opérations impliqués dans la valeur sans renvoient toujours 0, il ne convient donc pas pour tester des signes spécifiques. Vous pouvez utiliser une comparaison logique.

Pour plus d'informations et de ressources sur les attributs [Flags], son mode d'utilisation et de conception, consultez la documentation MSDN.

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