ホームページ > バックエンド開発 > C++ > [Flags]属性は、C#の列挙機能をどのように強化しますか?

[Flags]属性は、C#の列挙機能をどのように強化しますか?

Barbara Streisand
リリース: 2025-02-02 15:01:09
オリジナル
259 人が閲覧しました

How Does the [Flags] Attribute Enhance Enum Functionality in C#?

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
}
ログイン後にコピー
(.NET 4以降の場合)を使用してください:

[Flags]
public enum MyColors
{
    Yellow = 1,
    Green = 2,
    Red = 4,
    Blue = 8
}
ログイン後にコピー
または、古い.NETバージョンの場合、ビットワイズと演算子を使用してください:

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 サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート