C# での Flags 列挙のビット単位の演算
C# のビット演算子は整数の個々のビットを操作し、ビット フィールドに対する効率的で多用途な操作を可能にします。これらの操作を [Flags]
列挙に適用すると、複雑なフラグ構成を管理するための強力なツールが提供されます。
フラグの列挙
[Flags]
列挙は、各値がビット位置を表す特別なタイプの列挙です。 [Flags]
属性を適用すると、ビット単位の演算子を使用して複数の値を組み合わせることができます。
ビット演算
ビットを設定:
<code class="language-csharp">flags |= FlagsEnum.Bit4; // 设置位4</code>
ビットごとの OR 演算子 (|) は、指定されたビットを 1 に設定します。この例では、FlagsEnum.Bit4
はビット位置 4 に対応し、1 に設定されます。
クリアビット:
<code class="language-csharp">flags &= ~FlagsEnum.Bit4; // 清除位4</code>
ビットごとの AND 演算子 (&) を反転値 (~) とともに使用して、指定されたビットを 0 にクリアします。
スイッチ位置:
<code class="language-csharp">flags ^= FlagsEnum.Bit4; // 切换位4</code>
ビットごとの XOR 演算子 (^) は、指定されたビットを 0 と 1 の間で切り替えます。
テスト位置:
<code class="language-csharp">flags & FlagsEnum.Bit4 // 检查位4是否已设置</code>
ビットごとの AND 演算子 (~ なし) は、指定されたビットが 1 の場合、ゼロ以外の値を返し、ビットが設定されていることを示します。
カスタム拡張メソッドを使用して機能を強化します
列挙型でのビット単位の演算の使用を簡素化するために、拡張メソッドを定義できます。
<code class="language-csharp">namespace Enum.Extensions { public static class EnumerationExtensions { public static bool Has<T>(this System.Enum type, T value) { return (((int)(object)type & (int)(object)value) == (int)(object)value); } // ...此处添加其他扩展方法 } }</code>
Has()
拡張メソッドは、特定のビットが設定されているかどうかを確認する便利な方法を提供します。
使用例:
<code class="language-csharp">SomeType value = SomeType.Grapes; bool isGrapes = value.Has(SomeType.Grapes); // true</code>
以上がC# でフラグ列挙型でビット演算子を効果的に使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。