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