SORU
27 AĞUSTOS 2009, PERŞEMBE


Nasıl bir bayrak birleşimi bayrakları ayarlanmış olup olmadığını kontrol etmek için?

Hadi bu numaralama ki:

[Flags]
enum Letters
{
     A = 1,
     B = 2,
     C = 4,
     AB = A | B,
     All = A | B | C,
}

Örneğin AB ayarlanıp ayarlanmadığını kontrol etmek için bunu yapabilirim:

if((letter & Letters.AB) == Letters.AB)

Daha basit bir yol varsa birlikte bir bayrak sabit bayraklar aşağıdaki daha ayarlı olup olmadığını kontrol edin.

if((letter & Letters.A) == Letters.A || (letter & Letters.B) == Letters.B)

Bir şey ile örneğin & takas misiniz?

Böyle şeyler ikili olunca çok istikrarlı değil

CEVAP
20 Mart 2012, Salı


.NET 4 Enum.HasFlag method kullanabilirsiniz :

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.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Jason Parker

    Jason Parker

    14 Aralık 2009
  • Māris Zaharovs

    Māris Zahar

    28 Mayıs 2008
  • williamfitzsimmons

    williamfitzs

    14 Mart 2008