Enum.HasFlag(Enum) Metódus

Definíció

Meghatározza, hogy egy vagy több bitmező be van-e állítva az aktuális példányban.

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

Paraméterek

flag
Enum

Enumerálási érték.

Válaszok

trueha a megadott flag bitmező vagy bitmező az aktuális példányban is be van állítva; ellenkező esetben. false

Kivételek

flag más típusú, mint az aktuális példány.

Példák

Az alábbi példa egy olyan felsorolást DinnerItems határoz meg, amely az ügyfelek által egy étteremben megrendelhető elemek kategóriáit tükrözi. A példa azt vizsgálja, hogy az ügyfél megrendelt-e egy entrée-t és egy italt is.

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

Megjegyzések

A HasFlag metódus a következő logikai kifejezés eredményét adja vissza.

(thisInstance & flag) == flag

Ha a mögöttes flagérték true nulla, a metódus ad vissza . Ha ez a viselkedés nem kívánatos, akkor a módszerrel tesztelheti a Equals nullával való egyenlőséget, és csak akkor hívhatja meg HasFlag , ha a mögöttes érték flag nem nulla, ahogy az alábbi példa is mutatja.

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.

A HasFlag metódus úgy lett kialakítva, hogy az attribútummal FlagsAttribute megjelölt enumerálási típusok esetében használható legyen, és annak meghatározására használható, hogy több bitmező van-e beállítva. Az attribútummal FlagsAttribute nem jelölt enumerálási típusok esetében hívja meg a Equals metódust vagy a metódust CompareTo .

A következőre érvényes:

Lásd még