1

これらのオブジェクトを取得しました

enum ObjType { One, X, Two, Y, Three, Z}
List<ObjType> typeList

「typeListにX、Y、Zのような型が含まれていない場合、何かを行う」などの条件を作成したいのですが、そのためには次のようにします。

List<ObjType> typeExceptions = { ObjType.X, ObjType.Y, ObjType.Z}

if ( !typeList.Intersect(typeExceptions).Any() )
{
    //do something
}

「型例外」をハードコーディングせずにこれを行うためのよりクリーンな方法はありますか?

4

2 に答える 2

3

[Flags]これらのフラグに基本的なビット演算を適用するよりも使用できます!

[Flags]
enum Days2
{
  None = 0x0,
  Sunday = 0x1,
  Monday = 0x2,
  Tuesday = 0x4,
  Wednesday = 0x8,
  Thursday = 0x10,
  Friday = 0x20,
  Saturday = 0x40
 }

注:
- これにより、値にビット演算が適用されます。

と:

 var meetingDays = Days2.Tuesday & Days2.Thursday;

または:

meetingDays = Days2.Tuesday | Days2.Thursday;

削除する:

// Remove a flag using bitwise XOR. this will remove the tuesday from the week!
meetingDays = meetingDays ^ Days2.Tuesday;

いいえ:

meetingDays = meetingDays ~Days2.Tuesday;

Flag 列挙値も 2powern 0、1、2、4 などにする必要があることに注意する必要があります。

Microsoft 側からコードを取得した例を変更しました: http://msdn.microsoft.com/de-de/library/vstudio/cc138362.aspx

このリンクもとてもいいです: http://geekswithblogs.net/BlackRabbitCoder/archive/2010/07/22/c-fundamentals-combining-enum-values-with-bit-flags.aspx

于 2013-10-08T15:40:18.347 に答える