英語で読む

次の方法で共有


Enum.HasFlag(Enum) メソッド

定義

現在のインスタンスで 1 つ以上のビット フィールドが設定されているかどうかを判断します。

C#
public bool HasFlag (Enum flag);

パラメーター

flag
Enum

列挙値。

戻り値

Boolean

flag に設定されているビット フィールドが現在のインスタンスでも設定されている場合は true。それ以外の場合は false

例外

flag は現在のインスタンスとは異なる型です。

次の例では、顧客がレストランで注文できる項目のカテゴリを反映するDinnerItems列挙体を定義します。 この例では、顧客が前菜と飲み物の両方を発注したかどうかをテストします。

C#
using System;

[Flags] public enum DinnerItems {
   None = 0,
   Entree = 1,
   Appetizer = 2,
   Side = 4,
   Dessert = 8,
   Beverage = 16,
   BarBeverage = 32
}

public class Example
{
   public static void Main()
   {
      DinnerItems myOrder = DinnerItems.Appetizer | DinnerItems.Entree |
                            DinnerItems.Beverage | DinnerItems.Dessert;
      DinnerItems flagValue = DinnerItems.Entree | DinnerItems.Beverage;
      Console.WriteLine("{0} includes {1}: {2}",
                        myOrder, flagValue, myOrder.HasFlag(flagValue));
   }
}
// The example displays the following output:
//    Entree, Appetizer, Dessert, Beverage includes Entree, Beverage: True

注釈

HasFlagメソッドは、次のブール式の結果を返します。

thisInstance And flag = flag

flagの基になる値がゼロの場合、メソッドはtrueを返します。 この動作が望ましくない場合は、次の例に示すように、Equalsメソッドを使用してゼロと等しいかどうかをテストし、flagの基になる値が 0 以外の場合にのみHasFlagを呼び出します。

C#
using System;

[Flags] public enum Pets {
   None = 0,
   Dog = 1,
   Cat = 2,
   Bird = 4,
   Rabbit = 8,
   Other = 16
}

public class Example
{
   public static void Main()
   {
      Pets[] petsInFamilies = { Pets.None, Pets.Dog | Pets.Cat, Pets.Dog };
      int familiesWithoutPets = 0;
      int familiesWithDog = 0;

      foreach (var petsInFamily in petsInFamilies)
      {
         // Count families that have no pets.
         if (petsInFamily.Equals(Pets.None))
            familiesWithoutPets++;
         // Of families with pets, count families that have a dog.
         else if (petsInFamily.HasFlag(Pets.Dog))
            familiesWithDog++;
      }
      Console.WriteLine("{0} of {1} families in the sample have no pets.",
                        familiesWithoutPets, petsInFamilies.Length);
      Console.WriteLine("{0} of {1} families in the sample have a dog.",
                        familiesWithDog, petsInFamilies.Length);
   }
}
// The example displays the following output:
//       1 of 3 families in the sample have no pets.
//       2 of 3 families in the sample have a dog.

FlagsAttributeメソッドは、HasFlag属性でマークされた列挙型と共に使用するように設計されており、複数のビットフィールドが設定されているかどうかを判断するために使用できます。 FlagsAttribute属性でマークされていない列挙型の場合は、EqualsメソッドまたはCompareToメソッドのいずれかを呼び出します。

適用対象

製品 バージョン
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7
.NET Framework 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

こちらもご覧ください