DCSIMG
Add Flag and Remove Flag for enums - שלמה גולדברג (הרב דוטנט)

שלמה גולדברג (הרב דוטנט)

מרצה בסלע ויועץ בעולם ה - net.

Add Flag and Remove Flag for enums

 

הדרך הקלה לשימוש ב - 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);

תוכן התגובה

pavely כתב/ה:

ניתן לפשט יותר ולוותר על הפרמטר הגנרי:

my.AddFlag(MyEnum.C

# August 25, 2010 8:24 AM

Shlomo כתב/ה:

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

# August 25, 2010 9:22 AM

Sai כתב/ה:

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

# March 1, 2012 5:25 AM
שלח תגובה

(שדה חובה)  

(שדה חובה)  

(אופציונלי)

(שדה חובה) 

Please add 8 and 7 and type the answer here:


Enter the numbers above: