OT: Convert to Enum from int or char 1


Recently I answered a question on Stack Overflow where someone was interested in mapping a character to an Enum value.  Obviously this isn’t something naturally possible with Enums, so I proposed the following solution.  I’ve previously blogged about a generic approach to working with Strings and Enums here.

If we represented the Enum by using the ASCII value, we can define the Enum like so:

public enum Fruit : int
{
    Apple   = 65,  //’A’
    Banana = 66,  //’B’
    Cherry  = 67   //’C’
}

So, in order to convert ‘A’ –> Fruit.Apple we can convert the char (‘A’) to the int value and then cast it to the Enum.  I’ve also included another method using a similar approach to convert from an integer (e.g. 65 –> Fruit.Apple) to the desired Enum value.

    public static class EnumConverter<T> where T : struct
    {
        public static T FromIntToEnum(int intToConvert, out bool success)
        {
            try
            {
                if (Enum.IsDefined(typeof(T), intToConvert))
                {
                    success = true;
                    return (T)Enum.ToObject(typeof(T), intToConvert);
                }
            }
            catch (ArgumentException ex)
            {
                // Use your own Exception Management Here
            }
            catch (InvalidCastException ex)
            {
                // Use your own Exception Management Here
            }
            success = false;
            return default(T);
        }

        public static T ToEnum(char charToConvert, out bool success)
        {
            try
            {               
                int intValue = Convert.ToInt32(charToConvert);               
                if (Enum.IsDefined(typeof(T), intValue))
                {
                    success = true;
                    return (T)Enum.ToObject(typeof(T), intValue);
                }
            }
            catch (ArgumentException ex)
            {
                // Use your own Exception Management Here
            }
            catch (InvalidCastException ex)
            {
                // Use your own Exception Management Here
            }
            success = false;
            return default(T);
        }
    }

Here’s a possible usage scenario:

bool success = false;
Fruit selected = EnumConverter<Fruit>.ToEnum(‘A’, out success);
if (success)
{
     // good to go (returns Fruit.Apple)

}


About Rob Sanders

IT Professional and TOGAF 9 certified architect with nearly two decades of industry experience, 18 years in commercial software development and 11 years in IT consulting. Check out the "About Rob" page for more information.


Leave a comment

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

One thought on “OT: Convert to Enum from int or char