Create Generic method constraining T to an Enum
Posted
by johnc
on Stack Overflow
See other posts from Stack Overflow
or by johnc
Published on 2008-09-17T01:56:19Z
Indexed on
2010/04/18
5:43 UTC
Read the original article
Hit count: 414
I'm building a function to extend the Enum.Parse concept that
- allows a default value to be parsed in case that an Enum value is not found
- Is case insensitive
So I wrote the following
public static T GetEnumFromString<T>(string value, T defaultValue) where T : Enum
{
if (string.IsNullOrEmpty(value)) return defaultValue;
foreach (T item in Enum.GetValues(typeof(T)))
{
if (item.ToString().ToLower().Equals(value.Trim().ToLower())) return item;
}
return defaultValue;
}
I am getting a Error Constraint cannot be special class 'System.Enum'
Fair enough, but is there a workaround to allow a Generic Enum, or am I going to have to mimic the Parse function and pass a type as an attribute, which forces the ugly boxing requirement to your code.
EDIT All suggestions below have been greatly appreciated, thanks
Have settled on (I've left the loop to maintain case insensitivity - I am usng this when parsing XML)
public static class EnumUtils
{
public static T ParseEnum<T>(string value, T defaultValue) where T : struct, IConvertible
{
if (!typeof(T).IsEnum) throw new ArgumentException("T must be an enumerated type");
if (string.IsNullOrEmpty(value)) return defaultValue;
foreach (T item in Enum.GetValues(typeof(T)))
{
if (item.ToString().ToLower().Equals(value.Trim().ToLower())) return item;
}
return defaultValue;
}
}
© Stack Overflow or respective owner