Enum.HasFlag(Enum) Method

Definition

현재 인스턴스에 하나 이상의 비트 필드가 설정되어 있는지를 확인합니다.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

Parameters

flag
Enum

열거형 값입니다.An enumeration value.

Returns

Boolean

flag에 설정되어 있는 비트 필드가 현재 인스턴스에도 설정되어 있으면 true이고, 그렇지 않으면 false입니다.true if the bit field or bit fields that are set in flag are also set in the current instance; otherwise, false.

Exceptions

flag가 현재 인스턴스와는 다른 형식입니다.flag is a different type than the current instance.

Examples

다음 예제에서는 고객이 식당에서 주문할 수 있는 항목의 범주를 반영 하는 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

Remarks

HasFlag 메서드는 다음 부울 식의 결과를 반환 합니다.The HasFlag method returns the result of the following Boolean expression.

thisInstance And flag = flag   

flag의 내부 값이 0 이면 메서드는 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.

HasFlag 메서드는 FlagsAttribute 특성으로 표시 되 고 여러 비트 필드가 설정 되어 있는지 여부를 확인 하는 데 사용할 수 있는 열거형 형식과 함께 사용 하도록 설계 되었습니다.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.

Applies to

See also