System.Enum.HasFlag 方法

方法描述

确定当前实例中是否设置了一个或多个位域。

语法定义(C# System.Enum.HasFlag 方法 的用法)

public bool HasFlag(
	Enum flag
)

参数/返回值

参数值/返回值 参数类型/返回类型 参数描述/返回描述
flag System-Enum 一个枚举值。
返回值 System.Boolean 如果在 flag 中设置的位域也在当前实例中进行了设置,则为 true;否则为 false。

提示和注释

HasFlag 方法返回下列布尔表达式的结果。

复制

thisInstance And flag = flag

如果 flag 的基础值为零,则方法将返回 true。 如果此行为不理想,您可以使用 Equals 方法测试是否与零相等,并只在 flag 的值是非零时调用 HasFlag,如下面的示例所示。

C#

VB

复制

using System;

[Flags] public enum Pet {

None = 0,

Dog = 1,

Cat = 2,

Bird = 4,

Rabbit = 8,

Other = 16

}

public class Example

{

public static void Main()

{

Pet[] petsInFamilies = { Pet.None, Pet.Dog | Pet.Cat, Pet.Dog };

int familiesWithoutPets = 0;

int familiesWithDog = 0;

foreach (Pet petsInFamily in petsInFamilies)

{

// Count families that have no pets.

if (petsInFamily.Equals(Pet.None))

familiesWithoutPets++;

// Of families with pets, count families that have a dog.

else if (petsInFamily.HasFlag(Pet.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.

HasFlag 方法旨在用于使用 FlagsAttribute 特性标记的枚举类型。 对于没有标记 FlagsAttribute 特性的枚举类型,调用 Equals 方法或 CompareTo 方法。

System.Enum.HasFlag 方法例子

该示例测试是否客户已经同时点了主菜和饮料。

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

异常

异常 异常描述
ArgumentException flag 具有与当前实例不同的类型。

命名空间

namespace: System

程序集: mscorlib(在 mscorlib.dll 中)

版本信息

.NET Framework 受以下版本支持:4 .NET Framework Client Profile 受以下版本支持:4

适用平台

Windows 7, Windows Vista SP1 或更高版本, Windows XP SP3, Windows Server 2008(不支持服务器核心), Windows Server 2008 R2(支持 SP1 或更高版本的服务器核心), Windows Server 2003 SP2 .NET Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表,请参见.NET Framework 系统要求。