Enum.HasFlag(Enum) 方法
定义
确定当前实例中是否设置了一个或多个位域。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
参数
- flag
- Enum
一个枚举值。An enumeration value.
返回
如果在 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
.
异常
flag
是与当前实例不同的类型。flag
is a different type than the current instance.
示例
下面的示例定义了一个 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
注解
HasFlag 方法返回以下布尔表达式的结果。The HasFlag method returns the result of the following Boolean expression.
thisInstance And flag = flag
如果 flag
的基础值为零,则该方法将返回 true
。If the underlying value of flag
is zero, the method returns true
. 如果不需要此行为,则可以使用 Equals 方法测试是否与零相等,并且仅当 flag
的基础值为非零时,才调用 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.