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

  • AndroidSale

    AndroidSale

    17 NİSAN 2011
  • Break

    Break

    10 Aralık 2005
  • graham025

    graham025

    25 NİSAN 2006