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

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

Patricia Arquette
Patricia Arquette原創
2025-01-13 11:44:43952瀏覽

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn