SORU
18 EYLÜL 2008, PERŞEMBE


En yaygın# ına C çeteleler işlemleri

Beni hayat için, ayarlamak, silmek, ya da bir bit bir bit geçiş test etmek için nasıl bilmiyorum. Ya da emin değilim ya da ben nadiren de olsa lazım çünkü onları karıştırmak. "Bit-hile-sayfası" olması iyi olurdu. bir çok

Örneğin:

flags = flags | FlagsEnum.Bit4;  // Set bit 4.

ya

if ((flags & FlagsEnum.Bit4)) == FlagsEnum.Bit4) // Is there a less verbose way?

Tüm diğer ortak operasyonlar, tercihen C örnekleri# sözdizimi [Bayraklar] bir numaralandırma kullanarak verebilir misiniz?

CEVAP
6 Ocak 2009, Salı


Bu uzantılar üzerinde biraz daha çalışmak You can find the code here yaptım

Sistem genişleten uzatma yöntemleri yazdım.Sık kullandığım numaralama... kurşun geçirmez olduğunu iddia ediyor değilim, ama yardımcı oldular...Yorum kaldırıldı...

namespace Enum.Extensions {

    public static class EnumerationExtensions {

        public static bool Has<T>(this System.Enum type, T value) {
            try {
                return (((int)(object)type & (int)(object)value) == (int)(object)value);
            } 
            catch {
                return false;
            }
        }

        public static bool Is<T>(this System.Enum type, T value) {
            try {
                return (int)(object)type == (int)(object)value;
            }
            catch {
                return false;
            }    
        }


        public static T Add<T>(this System.Enum type, T value) {
            try {
                return (T)(object)(((int)(object)type | (int)(object)value));
            }
            catch(Exception ex) {
                throw new ArgumentException(
                    string.Format(
                        "Could not append value from enumerated type '{0}'.",
                        typeof(T).Name
                        ), ex);
            }    
        }


        public static T Remove<T>(this System.Enum type, T value) {
            try {
                return (T)(object)(((int)(object)type & ~(int)(object)value));
            }
            catch (Exception ex) {
                throw new ArgumentException(
                    string.Format(
                        "Could not remove value from enumerated type '{0}'.",
                        typeof(T).Name
                        ), ex);
            }  
        }

    }
}

Daha sonra aşağıdaki gibi kullanılır

SomeType value = SomeType.Grapes;
bool isGrapes = value.Is(SomeType.Grapes); //true
bool hasGrapes = value.Has(SomeType.Grapes); //true

value = value.Add(SomeType.Oranges);
value = value.Add(SomeType.Apples);
value = value.Remove(SomeType.Grapes);

bool hasOranges = value.Has(SomeType.Oranges); //true
bool isApples = value.Is(SomeType.Apples); //false
bool hasGrapes = value.Has(SomeType.Grapes); //false

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • How It Should Have Ended

    How It Shoul

    5 Mart 2007
  • TechShowsYou

    TechShowsYou

    3 Mart 2011
  • The Slow Mo Guys

    The Slow Mo

    15 AĞUSTOS 2010