Можно разрешить метод исключительно для перечислений через
https://gist.github.com/MrJul/7da12f5f2d6c69f03d79
public static bool TryParse<TEnum>(string name, out TEnum result)
where TEnum : struct, IComparable, IFormattable, IConvertible
Будет примерно так:
public abstract class EnumClassUtils<TClass> where TClass : class
{
public static TEnum? TryParse<TEnum>(string value) where TEnum : struct, TClass
{
TEnum result;
return Enum.TryParse(name, ignoreCase, out result) ? result : (TEnum?)null;
}
}
public class EnumUtils : EnumClassUtils<Enum>
{
}