Enum.HasFlag(Enum) Metódus
Definíció
Fontos
Egyes információk olyan, kiadás előtti termékekre vonatkoznak, amelyek a kiadásig még jelentősen módosulhatnak. A Microsoft nem vállal kifejezett vagy törvényi garanciát az itt megjelenő információért.
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 .