c#enumsの[flags]属性を理解する
c#enums、[Flags]
属性で飾られている場合、単一の値を表すことからオプションのセットに変換します。これは、ビットワイズオペレーターを採用する場合に特に役立ちます。 説明しましょう:
[Flags] public enum Options { None = 0, Option1 = 1, Option2 = 2, Option3 = 4, Option4 = 8 }
[Flags]
属性は、魔法のようにビットごとの操作を有効にしません。そのコア関数は、ToString()
メソッドの出力を改善することです。
enum Suits { Spades = 1, Clubs = 2, Diamonds = 4, Hearts = 8 } [Flags] enum SuitsFlags { Spades = 1, Clubs = 2, Diamonds = 4, Hearts = 8 } var str1 = (Suits.Spades | Suits.Diamonds).ToString(); // "5" var str2 = (SuitsFlags.Spades | SuitsFlags.Diamonds).ToString(); // "Spades, Diamonds"
個々のフラグを表示しますが、SuitsFlags
は数値合計を示しています。
Suits
非常に重要なことに、2つのパワーを自動的に割り当てません。 正しいビットワイズ操作のためにこれを手動で行う必要があります。 誤った使用法:
[Flags]
正しい使用法:
[Flags] public enum MyColors { Yellow, // 0 Green, // 1 Red, // 2 Blue // 3 }
[Flags] public enum MyColors { Yellow = 1, Green = 2, Red = 4, Blue = 8 }
HasFlag()
フラグは2つの力であるため、これは機能します
if (myProperties.AllowedColors.HasFlag(MyColor.Yellow)) { // Yellow is present }
ビットワイズを使用しないようにし、
を確認しないでください。それは常に間違っています。代わりに論理的な比較を使用して、フラグが設定されているかどうかを確認してください。if ((myProperties.AllowedColors & MyColor.Yellow) == MyColor.Yellow) { // Yellow is present }
属性は、C#enums内で一連のオプションを管理するための強力なツールであり、効率的なフラグ操作のためにビットワイズ操作を活用します。
以上が[Flags]属性は、C#の列挙機能をどのように強化しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。