Heim > Backend-Entwicklung > C++ > C# Bitwise Enum-Operationen: Ein prägnanter Spickzettel?

C# Bitwise Enum-Operationen: Ein prägnanter Spickzettel?

Patricia Arquette
Freigeben: 2025-01-13 12:30:52
Original
477 Leute haben es durchsucht

C# Bitwise Enum Operations: A Concise Cheat Sheet?

Gemeinsame Bitoperationen in C#-Aufzählungen

Dieser Artikel soll Entwicklern helfen, gängige Aufzählungsbitoperationen in C# zu verstehen.

Frage:

Bei bitweisen Operationen in Aufzählungen ist es immer verwirrend, wie man einzelne Bits setzt, löscht, umschaltet oder testet. Diese Vorgänge werden nicht häufig verwendet und können daher leicht vergessen werden. Ein „Bit-Operations-Spickzettel“ wird sehr hilfreich sein.

Beispiel:

<code class="language-csharp">flags = flags | FlagsEnum.Bit4;  // 设置第 4 位。</code>
Nach dem Login kopieren

oder

<code class="language-csharp">if ((flags & FlagsEnum.Bit4) == FlagsEnum.Bit4) // 是否有更简洁的方法?</code>
Nach dem Login kopieren

Können Sie Beispiele für alle anderen gängigen Vorgänge nennen? Es ist besser, C#-Syntax und [Flags]-Enumerationen zu verwenden.

Antwort:

Um dieses Problem zu lösen, haben einige Entwickler Erweiterungsmethoden erstellt, die System.Enum erweitern und diese Methoden bequemer zu verwenden sind.

<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>
Nach dem Login kopieren

Diese Methoden können wie folgt verwendet werden:

<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>
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonC# Bitwise Enum-Operationen: Ein prägnanter Spickzettel?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage