C# Set Flag Enumを理解する:フラグの割り当て
C#で権限、構成、または設定を扱うとき、複数の値を1つの変数に格納する必要がある場面によく遭遇します。 各設定に個別のブール値を使用する代わりに、フラグ列挙型を使用することができます。 このメソッドは、バイナリ演算を活用して、1つの整数値内の複数のオプションを効率的に管理します。
この記事では、ティム・コーリーのビデオBinary in C#に基づいて、C#でEnumフラグを設定する方法を詳しく見ていきます:10分以内にフラグを割り当てるというビデオに基づいています。 Timは、バイナリ演算を使用して複数の値を代入する方法を説明し、コードをより効率的で読みやすくします。 では始めましょう。
フラグ列挙型の紹介
Timは、このレッスンがC#でバイナリを理解するためのシリーズの一部であることを説明することから始めます。 このビデオでは、バイナリ演算を使ってフラグを割り当てる方法に焦点を当てています。 フラグにより、複数の値を1つの整数に格納することができ、権限管理がよりシンプルで効率的になります。
ビット単位の OR を使用して複数のフラグを割り当てる
Timは、ビット毎OR()を使用して複数のパーミッションを組み合わせる方法を示します。|演算子 彼は異なる権限レベルを含む列挙SystemPermissions` を作成します。SQL、Redis、BuildSystem などです。 複数の変数を使用する代わりに、すべての権限を1つの値に格納することができます。
変数に複数の権限を割り当てる例:
// Assume that SystemPermissions is an enum with values SQL, Redis, and BuildSystem
SystemPermissions TimPermissions = SystemPermissions.SQL | SystemPermissions.Redis;
// Print the current permissions - it will include both SQL and Redis
Console.WriteLine(TimPermissions);// Assume that SystemPermissions is an enum with values SQL, Redis, and BuildSystem
SystemPermissions TimPermissions = SystemPermissions.SQL | SystemPermissions.Redis;
// Print the current permissions - it will include both SQL and Redis
Console.WriteLine(TimPermissions);バイナリ表現の表示
何が起こっているのかをより理解するために、ティムは整数値を Convert.ToString(value, 2) を使用してそのバイナリ形式に変換することを提案します。 これにより、どのビットが設定されているかを視覚化することができます:
// Convert the permissions to a binary string to see the set bits
Console.WriteLine(Convert.ToString((int)TimPermissions, 2));// Convert the permissions to a binary string to see the set bits
Console.WriteLine(Convert.ToString((int)TimPermissions, 2));これは、異なるビット位置が異なるパーミッションに対応することを示し、1つの整数に複数の設定を格納できることを示しています。
OR-Equalsを使用して権限を追加する
Timは、`Autodesk.php'を使って動的に権限を追加できることを説明します。|=演算子:
// Add the BuildSystem permission to the existing permissions
TimPermissions |= SystemPermissions.BuildSystem;
// Print the updated permissions - it now includes SQL, Redis, and BuildSystem
Console.WriteLine(TimPermissions);// Add the BuildSystem permission to the existing permissions
TimPermissions |= SystemPermissions.BuildSystem;
// Print the updated permissions - it now includes SQL, Redis, and BuildSystem
Console.WriteLine(TimPermissions);32ビットの制限を理解する
C#の整数データ型には32ビットの制限があります。 これは、int に最大32のユニークなフラグしか格納できないことを意味します。 32以上のフラグが必要な場合は、long(64ビット)または複数の値を使用することを検討するべきです。 しかし、ほとんどの場合、32フラグで十分です。
データベースにフラグを保存する
フラグ列挙型を使用する最大の利点の1つは、データベースに効率的に格納できることです。 複数のブール値の列を格納する代わりに、すべての権限を表す単一の整数値を格納することができます。 ティムは、このアプローチによってデータベースの複雑さとストレージ要件が大幅に軽減されると説明しています。
例えば、TimPermissions が37として保存されている場合、それは次の組み合わせを表します。
- SQL (ビット1)
- Redis(ビット3)
- BuildSystem (ビット5)
データベースからこの値を取得すると、アクティブなパーミッションを決定するために簡単にデコードすることができます。
結論
Timは最後に、Flag Enumsのパワーを強調します。 バイナリ演算を使用すると、1つの整数内で複数の状態を効率的に管理できます。 このテクニックは、パフォーマンスを向上させ、データストレージを簡素化し、コードをより読みやすくします。
このアプローチに従うことで、C# Flag Enumsを使用したクリーンでスケーラブルな権限管理システムを実装することができます。 より理解を深めるために、ビデオの全文をご覧ください。

