Earn More by Sharing What You Love
Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!

Tim Corey
9 分 57 秒
C#で権限、構成、または設定を扱うとき、複数の値を1つの変数に格納する必要がある場面によく遭遇します。 各設定に個別のブール値を使用する代わりに、フラグ列挙型を使用することができます。 このメソッドは、バイナリ演算を活用して、1つの整数値内の複数のオプションを効率的に管理します。
この記事では、ティム・コーリーのビデオBinary in C#に基づいて、C#でEnumフラグを設定する方法を詳しく見ていきます:10分以内にフラグを割り当てるというビデオに基づいています。 Timは、バイナリ演算を使用して複数の値を代入する方法を説明し、コードをより効率的で読みやすくします。 では始めましょう。
Timは、このレッスンがC#でバイナリを理解するためのシリーズの一部であることを説明することから始めます。 このビデオでは、バイナリ演算を使ってフラグを割り当てる方法に焦点を当てています。 フラグにより、複数の値を1つの整数に格納することができ、権限管理がよりシンプルで効率的になります。
Timは、ビット毎OR()を使用して複数のパーミッションを組み合わせる方法を示します。|演算子 彼はSQL、Redis、BuildSystemなどの異なる権限レベルを含む列挙SystemPermissions`を作成します。 複数の変数を使用する代わりに、すべての権限を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
Dim TimPermissions As SystemPermissions = SystemPermissions.SQL Or SystemPermissions.Redis
' Print the current permissions - it will include both SQL and Redis
Console.WriteLine(TimPermissions)Timは、何が起こっているのかをよりよく理解するために、整数値をConvert.ToString(value, 2)を使用してその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(CInt(TimPermissions), 2))これは、異なるビット位置が異なるパーミッションに対応することを示し、1つの整数に複数の設定を格納できることを示しています。
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 = TimPermissions Or SystemPermissions.BuildSystem
' Print the updated permissions - it now includes SQL, Redis, and BuildSystem
Console.WriteLine(TimPermissions)C#の整数データ型には32ビットの制限があります。 これは、intに最大32のユニークなフラグしか保存できないことを意味します。 32以上のフラグが必要な場合は、long(64ビット)または複数の値を使用することを検討してください。 しかし、ほとんどの場合、32フラグで十分です。
フラグ列挙型を使用する最大の利点の1つは、データベースに効率的に格納できることです。 複数のブール値の列を格納する代わりに、すべての権限を表す単一の整数値を格納することができます。 ティムは、このアプローチによってデータベースの複雑さとストレージ要件が大幅に軽減されると説明しています。
例えば、TimPermissionsが37として保存されている場合、それはいくつかの組み合わせを表します。
データベースからこの値を取得すると、アクティブなパーミッションを決定するために簡単にデコードすることができます。
Timは最後に、Flag Enumsのパワーを強調します。 バイナリ演算を使用すると、1つの整数内で複数の状態を効率的に管理できます。 このテクニックは、パフォーマンスを向上させ、データストレージを簡素化し、コードをより読みやすくします。
このアプローチに従うことで、C# Flag Enumsを使用したクリーンでスケーラブルな権限管理システムを実装することができます。 より良い理解を得るために完全な ビデオ をご覧ください。
Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!
Join our newsletter, you’ll get exclusive access on article updates. We value your privacy