Enum.HasFlag(Enum) Enum.HasFlag(Enum) Enum.HasFlag(Enum) Enum.HasFlag(Enum) Method

定義

現在のインスタンスで 1 つ以上のビット フィールドが設定されているかどうかを判断します。Determines whether one or more bit fields are set in the current instance.

public:
 bool HasFlag(Enum ^ flag);
public bool HasFlag (Enum flag);
member this.HasFlag : Enum -> bool
Public Function HasFlag (flag As Enum) As Boolean

パラメーター

flag
Enum Enum Enum Enum

列挙値。An enumeration value.

戻り値

flag に設定されているビット フィールドが現在のインスタンスでも設定されている場合は true。それ以外の場合は falsetrue if the bit field or bit fields that are set in flag are also set in the current instance; otherwise, false.

例外

flag は現在のインスタンスとは異なる型です。flag is a different type than the current instance.

次の例では、顧客がレストランで注文できる項目のカテゴリを反映するItemsOrdered列挙体を定義します。The following example defines an ItemsOrdered enumeration that reflects categories of items that a customer can order in a restaurant. この例では、顧客が前菜と飲み物の両方を発注したかどうかをテストします。The example tests whether the customer has ordered both an entrée and a beverage.

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
<Flags> Public Enum DinnerItems As Integer
   None = 0
   Entree = 1
   Appetizer = 2
   Side = 4
   Dessert = 8
   Beverage = 16 
   BarBeverage = 32
End Enum

Module Example
   Public Sub Main()
      Dim myOrder As DinnerItems = DinnerItems.Appetizer Or DinnerItems.Entree Or
                                   DinnerItems.Beverage Or DinnerItems.Dessert
      Dim flagValue As DinnerItems = DinnerItems.Entree Or DinnerItems.Beverage
      Console.WriteLine("{0} includes {1}: {2}", 
                        myOrder, flagValue, myOrder.HasFlag(flagValue))
   End Sub
End Module
' The example displays the following output:
'    Entree, Appetizer, Dessert, Beverage includes Entree, Beverage: True

注釈

HasFlagメソッドは、次のブール式の結果を返します。The HasFlag method returns the result of the following Boolean expression.

thisInstance And flag = flag   

flagの基になる値がゼロの場合、メソッドはtrueを返します。If the underlying value of flag is zero, the method returns true. この動作が望ましくない場合は、次の例に示すように、Equalsメソッドを使用してゼロと等しいかどうかをテストし、flagの基になる値が 0 以外の場合にのみHasFlagを呼び出します。If this behavior is not desirable, you can use the Equals method to test for equality with zero and call HasFlag only if the underlying value of flag is non-zero, as the following example illustrates.

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.
<Flags> Public Enum Pets
   None = 0
   Dog = 1
   Cat = 2
   Bird = 4
   Rabbit = 8
   Other = 16
End Enum

Module Example
   Public Sub Main()
      Dim petsInFamilies() As Pets = { Pets.None, Pets.Dog Or Pets.Cat, Pets.Dog }
      Dim familiesWithoutPets As Integer
      Dim familiesWithDog As Integer
      
      For Each petsInFamily In petsInFamilies
         ' Count the number of families that have no pets.
         If petsInFamily.Equals(Pets.None) Then
            familiesWithoutPets += 1 
        ' Of families that have pets, count the number of families with a dog.
         Else If petsInFamily.HasFlag(Pets.Dog) Then
            familiesWithDog += 1
         End If
      Next
      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)   
   End Sub
End Module
' 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属性でマークされた列挙型と共に使用するように設計されており、複数のビットフィールドが設定されているかどうかを判断するために使用できます。The HasFlag method is designed to be used with enumeration types that are marked with the FlagsAttribute attribute and can be used to determine whether multiple bit fields are set. FlagsAttribute属性でマークされていない列挙型の場合は、EqualsメソッドまたはCompareToメソッドのいずれかを呼び出します。For enumeration types that are not marked with the FlagsAttribute attribute, call either the Equals method or the CompareTo method.

適用対象

こちらもご覧ください