Enum.HasFlag(Enum) Metodo
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Determina se nell'istanza corrente sono impostati uno o più campi di bit.
public:
bool HasFlag(Enum ^ flag);
public bool HasFlag(Enum flag);
member this.HasFlag : Enum -> bool
Public Function HasFlag (flag As Enum) As Boolean
Parametri
- flag
- Enum
Valore di enumerazione.
Valori restituiti
true se il campo di bit o i campi di bit impostati in flag vengono impostati anche nell'istanza corrente; in caso contrario, false.
Eccezioni
flag è un tipo diverso rispetto all'istanza corrente.
Esempio
Nell'esempio seguente viene definita un'enumerazione DinnerItems che riflette le categorie di articoli che un cliente può ordinare in un ristorante. L'esempio verifica se il cliente ha ordinato sia un entrée che una bevanda.
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
Commenti
Il HasFlag metodo restituisce il risultato dell'espressione booleana seguente.
(thisInstance & flag) == flag
Se il valore sottostante di flag è zero, il metodo restituisce true. Se questo comportamento non è auspicabile, è possibile usare il metodo per verificare l'uguaglianza Equals con zero e chiamare HasFlag solo se il valore sottostante di flag è diverso da zero, come illustrato nell'esempio seguente.
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.
Il HasFlag metodo è progettato per essere usato con tipi di enumerazione contrassegnati con l'attributo FlagsAttribute e può essere usato per determinare se sono impostati più campi di bit. Per i tipi di enumerazione non contrassegnati con l'attributo FlagsAttribute , chiamare il Equals metodo o il CompareTo metodo .