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
Barbara Streisandoriginal
2025-02-02 14:56:10487parcourir

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

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>
    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>
    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!

Déclaration:
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