首頁 > 後端開發 > C++ > C# 位元枚舉運算:簡明備忘單?

C# 位元枚舉運算:簡明備忘單?

Patricia Arquette
發布: 2025-01-13 12:30:52
原創
477 人瀏覽過

C# Bitwise Enum Operations: A Concise Cheat Sheet?

C# 枚舉的常用位元運算

本文旨在幫助開發者理解 C# 中常見的枚舉位元運算。

問題:

在枚舉中進行位元運算時,如何設定、清除、切換或測試單位元總是讓人困惑。這些操作並不常用,所以很容易忘記。一份「位元運算速查表」將非常有用。

範例:

<code class="language-csharp">flags = flags | FlagsEnum.Bit4;  // 设置第 4 位。</code>
登入後複製

<code class="language-csharp">if ((flags & FlagsEnum.Bit4) == FlagsEnum.Bit4) // 是否有更简洁的方法?</code>
登入後複製

你能為所有其他常見操作提供範例嗎?最好使用 C# 語法和 [Flags] 枚舉。

解答:

為了解決這個問題,一些開發者創建了擴充 System.Enum 的擴充方法,這些方法使用起來更方便。

<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>
登入後複製

這些方法可以這樣使用:

<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>
登入後複製

以上是C# 位元枚舉運算:簡明備忘單?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板