Convert string to Enum

25 ביוני 2012

תגיות: ,
אין תגובות

בבואנו להמיר מחרוזת לאובייקט מסוג enum, נשתמש כמובן במתודה Enum.Parse.

הקוד הבסיסי יראה כך:

string enumNumber = "2";

string enumString = "Red";

 

Color color1 = (Color)Enum.Parse(typeof(Color), enumString);

Color color2 = (Color)Enum.Parse(typeof(Color), enumNumber);

 

כמובן שמומלץ להשתמש ב – Extension Method שכתבתי כאן ואז הסינטקס יהיה ברור יותר.

 

במידה ואתם כותבים קוד גנרי (למשל קוד שקורא מקבצי טקסט מידע וממיר אותם לאובייקטים, לפעמים נוח יותר לכתוב קוד כזה.

 

Color color3 = (Color)TypeDescriptor.GetConverter(typeof(Color)).ConvertFrom(enumString);

Color color4 = (Color)TypeDescriptor.GetConverter(typeof(Color)).ConvertFrom(enumNumber);

 

המתודה GetConverter מחזירה אובייקט מסוג TypeConverter היודעת להמיר בין אובייקטים שונים (דוגמא לכך כתבתי כאן)

לאחרונה יצא לי לקרוא מידע שנכתב בקובץ עם ערכים עבור ה – enum, רק שהערכים שנכתבו החילו רק את האות הראשונה של ה – enum, מה שהביא אותי לכתוב את הקוד הבא:

 

public class FirstLetterTypeConverter : TypeConverter

{

    public Type EnumType { get; set; }

 

    public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)

    {

        var valuaAsString = value.ToString();

        var names = Enum.GetNames(EnumType);

        var name = names.Single(x => x.StartsWith(valuaAsString));

        if (names != null)

        {

            return Enum.Parse(EnumType, name);

        }

 

        return null;

    }

}

ולאחר מכן:

[TypeConverter(typeof(FirstLetterTypeConverter))]

enum Color

{

    Black = 1,

    Red = 2,

    Yellow = 4

}

 

והשימוש בו יהיה:

TypeConverter typeConverter = TypeDescriptor.GetConverter(typeof(Color));

Color color5;

 

var firstLetterTypeConverter = typeConverter as FirstLetterTypeConverter;

if (firstLetterTypeConverter != null)

{

    firstLetterTypeConverter.EnumType = typeof(Color);

}

color5 = (Color)firstLetterTypeConverter.ConvertFrom(enumLetter);

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

כתיבת תגובה

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