Enum.HasFlag(Enum) Methode

Definition

Bestimmt, ob ein oder mehrere Bitfelder in der aktuellen Instanz festgelegt werden.

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

Parameter

flag
Enum

Ein Enumerationswert.

Gibt zurück

true, wenn das in flag festgelegte Bitfeld bzw. die Bitfelder auch in der aktuellen Instanz festgelegt werden, andernfalls false.

Ausnahmen

flag weist einen anderen Typ als die aktuelle Instanz auf.

Beispiele

Im folgenden Beispiel wird eine DinnerItems Enumeration definiert, die Kategorien von Elementen widerspiegelt, die ein Kunde in einem Restaurant bestellen kann. Das Beispiel testet, ob der Kunde sowohl ein Vorspeisen- als auch ein Getränk bestellt hat.

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
open System

[<Flags>] 
type DinnerItems =
    | None = 0
    | Entree = 1
    | Appetizer = 2
    | Side = 4
    | Dessert = 8
    | Beverage = 16
    | BarBeverage = 32

let myOrder = 
    DinnerItems.Appetizer ||| DinnerItems.Entree ||| DinnerItems.Beverage ||| DinnerItems.Dessert
let flagValue = 
    DinnerItems.Entree ||| DinnerItems.Beverage
printfn $"{myOrder} includes {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

Hinweise

Die HasFlag -Methode gibt das Ergebnis des folgenden booleschen Ausdrucks zurück.

(thisInstance & flag) == flag

Wenn der zugrunde liegende Wert von flag 0 ist, gibt die -Methode zurück true. Wenn dieses Verhalten nicht wünschenswert ist, können Sie die Equals -Methode verwenden, um die Gleichheit mit 0 zu testen und nur dann aufzurufen HasFlag , wenn der zugrunde liegende Wert von flag ungleich 0 ist, wie im folgenden Beispiel veranschaulicht.

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.
open System

[<Flags>] 
type Pets =
    | None = 0
    | Dog = 1
    | Cat = 2
    | Bird = 4
    | Rabbit = 8
    | Other = 16

let petsInFamilies = [| Pets.None; Pets.Dog ||| Pets.Cat; Pets.Dog |]
let mutable familiesWithoutPets = 0
let mutable familiesWithDog = 0

for petsInFamily in petsInFamilies do
    // Count families that have no pets.
    if petsInFamily.Equals Pets.None then
        familiesWithoutPets <- familiesWithoutPets + 1
    // Of families with pets, count families that have a dog.
    elif petsInFamily.HasFlag Pets.Dog then
        familiesWithDog <- familiesWithDog + 1

printfn $"{familiesWithoutPets} of {petsInFamilies.Length} families in the sample have no pets."
printfn $"{familiesWithDog} of {petsInFamilies} families in the sample have a dog."
// 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.

Die HasFlag -Methode ist für die Verwendung mit Enumerationstypen konzipiert, die mit dem FlagsAttribute -Attribut gekennzeichnet sind, und kann verwendet werden, um zu bestimmen, ob mehrere Bitfelder festgelegt sind. Rufen Sie für Enumerationstypen, die nicht mit dem FlagsAttribute -Attribut gekennzeichnet sind, entweder die Equals -Methode oder die CompareTo -Methode auf.

Gilt für:

Weitere Informationen