IRONSOFTWAREHOME

C# Set Flag Enumを理解する:フラグの割り当て

 .NET CLI を使用して C# アプリケーションを簡単にコンテナ化する

Tim Corey

9 分 57 秒

C#で権限、構成、または設定を扱うとき、複数の値を1つの変数に格納する必要がある場面によく遭遇します。 各設定に個別のブール値を使用する代わりに、フラグ列挙型を使用することができます。 このメソッドは、バイナリ演算を活用して、1つの整数値内の複数のオプションを効率的に管理します。

この記事では、ティム・コーリーのビデオBinary in C#に基づいて、C#でEnumフラグを設定する方法を詳しく見ていきます:10分以内にフラグを割り当てるというビデオに基づいています。 Timは、バイナリ演算を使用して複数の値を代入する方法を説明し、コードをより効率的で読みやすくします。 では始めましょう。

フラグ列挙型の紹介

Timは、このレッスンがC#でバイナリを理解するためのシリーズの一部であることを説明することから始めます。 このビデオでは、バイナリ演算を使ってフラグを割り当てる方法に焦点を当てています。 フラグにより、複数の値を1つの整数に格納することができ、権限管理がよりシンプルで効率的になります。

ビット単位の OR を使用して複数のフラグを割り当てる

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);

バイナリ表現の表示

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));

これは、異なるビット位置が異なるパーミッションに対応することを示し、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);

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を使用したクリーンでスケーラブルな権限管理システムを実装することができます。 より良い理解を得るために完全な ビデオ をご覧ください。

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!

Let's Stay in Touch!

Join our newsletter, you’ll get exclusive access on article updates. We value your privacy

Key in blue circle

無料の30日間トライアルキーをすぐに入手してください。

Your trial license will be sent to your email address

制限なし。100% ロック解除済み。クレジットカード不要。

OR
bullet_checkedクレジットカードやアカウントの作成は不要です。制限なし。100% ロック解除済み。クレジットカード不要。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried Iron Suite
義務のない相談を受ける
下記のフォームを記入するか、sales@ironsoftware.comにメールしてください。
あなたの詳細は常に守秘されます。
世界中の数百万人のエンジニアから信頼されています。
ライセンスはより安く
あなたの無料30日間の試用キーをすぐに入手。
クレジットカードやアカウントの作成は不要です。