Maison > développement back-end > C++ > Opérations C# Bitwise Enum : une aide-mémoire concise ?

Opérations C# Bitwise Enum : une aide-mémoire concise ?

Patricia Arquette
Libérer: 2025-01-13 12:30:52
original
477 Les gens l'ont consulté

C# Bitwise Enum Operations: A Concise Cheat Sheet?

Opérations sur les bits courantes dans les énumérations C#

Cet article vise à aider les développeurs à comprendre les opérations courantes sur les bits d'énumération en C#.

Question :

Lorsque vous effectuez des opérations au niveau des bits dans les énumérations, il est toujours difficile de savoir comment définir, effacer, basculer ou tester des bits individuels. Ces opérations ne sont pas couramment utilisées et sont donc faciles à oublier. Une « aide-mémoire sur les opérations sur bits » sera très utile.

Exemple :

<code class="language-csharp">flags = flags | FlagsEnum.Bit4;  // 设置第 4 位。</code>
Copier après la connexion

ou

<code class="language-csharp">if ((flags & FlagsEnum.Bit4) == FlagsEnum.Bit4) // 是否有更简洁的方法?</code>
Copier après la connexion

Pouvez-vous fournir des exemples pour toutes les autres opérations courantes ? Il est préférable d'utiliser la syntaxe C# et les énumérations [Flags].

Réponse :

Pour résoudre ce problème, certains développeurs ont créé des méthodes d'extension qui étendent System.Enum et ces méthodes sont plus pratiques à utiliser.

<code class="language-csharp">namespace Enum.Extensions
{
    public static class EnumerationExtensions
    {
        public static bool Has<T>(this System.Enum type, T value)
        {
            try
            {
                return (((int)(object)type & (int)(object)value) == (int)(object)value);
            }
            catch
            {
                return false;
            }
        }

        public static bool Is<T>(this System.Enum type, T value)
        {
            try
            {
                return (int)(object)type == (int)(object)value;
            }
            catch
            {
                return false;
            }
        }

        public static T Add<T>(this System.Enum type, T value)
        {
            try
            {
                return (T)(object)(((int)(object)type | (int)(object)value));
            }
            catch (Exception ex)
            {
                throw new ArgumentException(
                    string.Format(
                        "无法将值添加到枚举类型 '{0}'。",
                        typeof(T).Name
                        ), ex);
            }
        }

        public static T Remove<T>(this System.Enum type, T value)
        {
            try
            {
                return (T)(object)(((int)(object)type & ~(int)(object)value));
            }
            catch (Exception ex)
            {
                throw new ArgumentException(
                    string.Format(
                        "无法从枚举类型 '{0}' 中移除值。",
                        typeof(T).Name
                        ), ex);
            }
        }
    }
}</code>
Copier après la connexion

Ces méthodes peuvent être utilisées comme ceci :

<code class="language-csharp">SomeType value = SomeType.Grapes;
bool isGrapes = value.Is(SomeType.Grapes); // true
bool hasGrapes = value.Has(SomeType.Grapes); // true

value = value.Add(SomeType.Oranges);
value = value.Add(SomeType.Apples);
value = value.Remove(SomeType.Grapes);

bool hasOranges = value.Has(SomeType.Oranges); // true
bool isApples = value.Is(SomeType.Apples); // false
bool hasGrapes = value.Has(SomeType.Grapes); // false</code>
Copier après la connexion

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