Add Flag and Remove Flag for enums

24 באוגוסט 2010

3 תגובות


 



הדרך הקלה לשימוש ב – Enums שמוגדרים עם Flags


 

 

כשקראתי את הפוסט של עידו על הפונקצייה החדשה של Enum בשם HasFlag לא הבנתי למה הם לא הוסיפו גם Add ו – Remove.

 

חיפוש קצר בגוגל הביא אותי לכאן והנה לנו שני Extensions חדשים לעבודה עם Enum.

 

 



namespace System


{


    public static class EnumExtension


    {


        public static T AddFlag<T>(this Enum type, T value)


        {


            return (T)(object)(((int)(object)type | (int)(object)value));


        }


 


        public static T RemoveFlag<T>(this Enum type, T value)


        {


            return (T)(object)(((int)(object)type & ~(int)(object)value));


        }


    }


}


 

והשימוש פשוט ביותר

 

 



[Flags]


enum MyEnum


{


    A = 1,


    B = 2,


    C = 4


}


 


 



MyEnum my = MyEnum.A;


 


my = my.AddFlag<MyEnum>(MyEnum.C);


my = my.RemoveFlag<MyEnum>(MyEnum.A);


 


// From microsoft


bool b = my.HasFlag(MyEnum.B);

הוסף תגובה
facebook linkedin twitter email

כתיבת תגובה

האימייל לא יוצג באתר. שדות החובה מסומנים *

3 תגובות

  1. pavely25 באוגוסט 2010 ב 8:24

    ניתן לפשט יותר ולוותר על הפרמטר הגנרי:
    my.AddFlag(MyEnum.C

    הגב
  2. Shlomo25 באוגוסט 2010 ב 9:22

    במקרה הזה נצטרך לעשות cast לערך שחוזר.

    הגב
  3. Sai1 במרץ 2012 ב 5:25

    Haha. I woke up down today. You've chreeed me up!

    הגב