Enum.HasFlag(Enum) Yöntem

Tanım

Geçerli örnekte bir veya daha fazla bit alanının ayarlanıp ayarlanmayacağını belirler.

public bool HasFlag(Enum flag);

Parametreler

flag
Enum

Bir numaralandırma değeri.

Döndürülenler

true içinde ayarlanan flag bit alanı veya bit alanları da geçerli örnekte ayarlanmışsa; değilse, false.

Özel durumlar

flag geçerli örnekten farklı bir türdür.

Örnekler

Aşağıdaki örnek, bir müşterinin bir DinnerItems restoranda sipariş verebileceği öğe kategorilerini yansıtan bir sabit listesi tanımlar. Örnek, müşterinin hem entrée hem de içecek sipariş edip etmediğini test ediyor.

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

Açıklamalar

HasFlag yöntemi aşağıdaki Boole ifadesinin sonucunu döndürür.

(thisInstance & flag) == flag

temel alınan değeri flag sıfırsa yöntemi döndürür true. Bu davranış istenmiyorsa, aşağıdaki örnekte gösterildiği gibi sıfır ile eşitliği test etmek ve yalnızca temel alınan değeri flag sıfır değilse çağrısı HasFlag yapmak için yöntemini kullanabilirsinizEquals.

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.

HasFlag yöntemi, özniteliğiyle işaretlenmiş numaralandırma türleriyle FlagsAttribute kullanılacak şekilde tasarlanmıştır ve birden çok bit alanının ayarlanıp ayarlanmadığını belirlemek için kullanılabilir. özniteliğiyle işaretlenmemiş numaralandırma türleri için FlagsAttribute yöntemini veya yöntemini çağırın EqualsCompareTo .

Şunlara uygulanır

Ürün Sürümler
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

Ayrıca bkz.