C# の [Flags] 列挙のビット単位の操作
フラグ列挙を使用する場合、列挙値内の個々のビットをシームレスに管理および操作するためのビット操作をマスターすることが重要です。このチートシートは、C# での一般的なビット操作の概要を提供することを目的としています。
特定のビットを設定します
[Flags] 列挙に特定のビットを設定するには、ビットごとの OR 演算子 (|) を使用します。次の例を考えてみましょう:
<code class="language-csharp">FlagsEnum flags = FlagsEnum.None; flags |= FlagsEnum.Bit4; // 设置位 4</code>
特定のビットを削除します
特定のビットを削除するには、ビットごとの AND 演算子とビットの否定を使用します。以下に例を示します:
<code class="language-csharp">if ((flags & ~FlagsEnum.Bit4) == 0) { // 已移除位 4 }</code>
特定のビットを切り替えます
特定のビットを反対の値に切り替えるには、ビットごとの XOR 演算子 (^) を使用します。
<code class="language-csharp">flags ^= FlagsEnum.Bit4; // 切换位 4</code>
特定のビットが設定されているかどうかを確認します
特定のビットが設定されているかどうかを判断するには、ビットごとの AND 演算子を使用して比較します。
<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 中国語 Web サイトの他の関連記事を参照してください。