Enum.HasFlag(Enum) メソッド
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
現在のインスタンスで 1 つ以上のビット フィールドが設定されているかどうかを判断します。
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
列挙値。
戻り値
flag
に設定されているビット フィールドが現在のインスタンスでも設定されている場合は true
。それ以外の場合は false
。
例外
flag
は現在のインスタンスとは異なる型です。
例
次の例では、顧客がレストランで注文できる項目のカテゴリを反映するDinnerItems
列挙体を定義します。 この例では、顧客が前菜と飲み物の両方を発注したかどうかをテストします。
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
注釈
HasFlagメソッドは、次のブール式の結果を返します。
thisInstance And flag = flag
flag
の基になる値がゼロの場合、メソッドはtrue
を返します。 この動作が望ましくない場合は、次の例に示すように、Equalsメソッドを使用してゼロと等しいかどうかをテストし、flag
の基になる値が 0 以外の場合にのみHasFlagを呼び出します。
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.
FlagsAttributeメソッドは、HasFlag属性でマークされた列挙型と共に使用するように設計されており、複数のビットフィールドが設定されているかどうかを判断するために使用できます。 FlagsAttribute属性でマークされていない列挙型の場合は、EqualsメソッドまたはCompareToメソッドのいずれかを呼び出します。