1

二項演算は非常に便利です。このようにして | ^ &、新しいシーケンスを発行することができます。

ただし、値が付加されていない (または値がまったくない) がある場合がありEnumますbase 2

すなわち:

ここに画像の説明を入力

Enhance || derive|| attach各エントリの Enum (可能であれば) に値を設定したいと思います。

だから私はできるようになります:

if (MyListItemType== Header |Footer ) ...

出来ますか ?または、トリッキーな回避策はありますか?

4

6 に答える 6

10

|| 強化したい || 派生|| 各エントリの Enum (可能な場合) に値を追加します。

それはできません(列挙型の再定義を除いて)。しかし、所有していないコードに含まれている場合は、それで終わりです。番号付けに依存するコードが既に存在する可能性があり、int 値を変更するとそのコードが壊れます。

しかし、これは通常、Enum がビット セットとして意図されていないことを意味するため、ビット セットとして使用しようとするのはおそらく良い考えではありません。

これは、コードの作成者の設計上の決定です。

あなたの例のリストを見てください:

var item = ListItemType.Header | ListItemType.Footer | ListItemType.SelectedItem;

itemヘッダー、フッター、および選択されたアイテムを同時に使用できますか? これは、相互に排他的なオプションのリストです。

于 2012-04-04T11:37:03.613 に答える
5

flags列挙型を使用したい場合:

[Flags]
enum Days2
{
    None = 0x0,
    Sunday = 0x1,
    Monday = 0x2,
    Tuesday = 0x4,
    Wednesday = 0x8,
    Thursday = 0x10,
    Friday = 0x20,
    Saturday = 0x40
}
class MyClass
{
    Days2 meetingDays = Days2.Tuesday | Days2.Thursday;
}
于 2012-04-04T11:35:46.400 に答える
4

いいえ、できません。

Enumが and/orでマークされていない場合、FlagsEnumerationおよび/または正しいビットマスク値を持っている場合 (「base2 がありません」と言うように)、意味のある結果を得るためにビット演算を使用することはできません。

于 2012-04-04T11:37:46.320 に答える
3

他の人が言ったように、それはできませんが、拡張メソッドを使用してショートカットを使用します。

public enum MyEnum
    {
        This,
        That,
        TheOther
    }

    public static class MyEnumeExtensions
    {
        public static bool IsAny(this MyEnum enumValue, params MyEnum[] values)
        {
            return values.Any((e) => e == enumValue);
        }
    }

だから私は使用することができます:

myEnum.IsAny(This, That);

これは、ほとんどあなたが達成したかったことです。

于 2012-04-04T11:55:59.083 に答える
0

フラグ列挙型を探しています: http://msdn.microsoft.com/en-us/library/cc138362.aspx

于 2012-04-04T11:36:29.807 に答える
0
[Flags]
enum Days2
{
    None = 0x0,
    Sunday = 0x1,
    Monday = 0x2,
    Tuesday = 0x4,
    Wednesday = 0x8,
    Thursday = 0x10,
    Friday = 0x20,
    Saturday = 0x40
}

http://msdn.microsoft.com/en-us/library/cc138362.aspx

その後、ビットごとの演算子を使用できます。

于 2012-04-04T11:36:46.783 に答える