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中文网其他相关文章!