首頁 > 後端開發 > C++ > 如何在 C# 中對標誌枚舉執行位元運算?

如何在 C# 中對標誌枚舉執行位元運算?

Patricia Arquette
發布: 2025-01-13 11:44:43
原創
895 人瀏覽過

How to Perform Bitwise Operations on Flags Enums in C#?

C# 中 [Flags] 枚舉的位元運算

在使用標誌枚舉時,掌握位元運算來無縫管理和操作枚舉值中的單位元至關重要。本速查表旨在簡要概述 C# 中常見的位元運算。

設定特定位元

要設定 [Flags] 枚舉中的特定位,請使用位元或運算子 (|)。考慮以下範例:

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

移除特定位元

要移除特定位,請使用位元與運算子和位元的否定值。這是一個範例:

<code class="language-csharp">if ((flags & ~FlagsEnum.Bit4) == 0) {
    // 已移除位 4
}</code>
登入後複製

切換特定位元

要將特定位元切換到相反的值,請使用位元異或運算子 (^)。

<code class="language-csharp">flags ^= FlagsEnum.Bit4; // 切换位 4</code>
登入後複製

檢查是否設定了特定位元

要確定是否設定了特定位,請使用位元與運算符,然後進行比較。

<code class="language-csharp">if ((flags & FlagsEnum.Bit4) == FlagsEnum.Bit4) {
    // 设置了位 4
}</code>
登入後複製

附加擴充方法

使用自訂方法擴充 System.Enum 類別可以進一步簡化位元運算。考慮以下擴充:

<code class="language-csharp">public static class EnumExtensions {

    public static bool Has<T>(this Enum type, T value) =>
        (((int)(object)type & (int)(object)value) == (int)(object)value);

    public static T Add<T>(this Enum type, T value) =>
        (T)(object)(((int)(object)type | (int)(object)value));

    public static T Remove<T>(this Enum type, T value) =>
        (T)(object)(((int)(object)type & ~(int)(object)value));
}</code>
登入後複製

這些方法為位元運算提供了方便的捷徑:

<code class="language-csharp">SomeType value = SomeType.Grapes;
value.Has(SomeType.Grapes); // true
value = value.Add(SomeType.Oranges);
value.Has(SomeType.Oranges); // true
value = value.Remove(SomeType.Grapes);
value.Has(SomeType.Grapes); // false</code>
登入後複製

以上是如何在 C# 中對標誌枚舉執行位元運算?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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