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);
    }
}

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s