enum

Jak castować na właściwy Enum

Posted on

Napiszę jak to robię bo .NET udostępnia parę fajnych rzeczy do tego.

Głównie chodzi o parsowanie ze stringa.

FileMode fileMode = (FileMode)Enum.Parse(typeof(FileMode), stringValue, true);

Trzeci argument nazywa się ignoreCase i zazwyczaj ustawiam na true czyli wielkość liter nie muszi się zgadzać, żeby zwrócić właściwy enum.

Jeśli może się nie powieść to korzystam z analogicznej funkcji TryParse()

FileMode fileMode;
if (Enum.TryParse(stringValue, true, out fileMode))
{
    return fileMode;
}
else
{
    // ..
}

Najczęściej wrzucam do projektów coś na wzór tych rozkmin z StackOverflow:
http://stackoverflow.com/questions/16100/how-do-i-convert-a-string-to-an-enum-in-c/16104#16104
http://stackoverflow.com/questions/79126/create-generic-method-constraining-t-to-an-enum/79903#79903

public class EnumHelper
{
    public static TEnum GetEnumFromString<TEnum>(string value) where TEnum : struct, IComparable
    {
        if (!typeof(TEnum).IsEnum)
        {
            throw new ArgumentException(string.Format("{0} must be an enumerated type", typeof(TEnum).FullName));
        }

        return (TEnum)Enum.Parse(typeof(TEnum), value, true);
    }
}