Лучшее, что вы можете сделать, это where T : struct
.
Для методов без расширения вы можете использовать уродливый трюк:
public abstract class Enums<Temp> where Temp : class {
public static TEnum Parse<TEnum>(string name) where TEnum : struct, Temp {
return (TEnum)Enum.Parse(typeof(TEnum), name);
}
}
public abstract class Enums : Enums<Enum> { }
Enums.Parse<DateTimeKind>("Local")
Если хотите, вы можете дать Enums<Temp>
закрытый конструктор и открытый вложенный абстрактный унаследованный класс с Temp
как Enum
, чтобы предотвратить унаследованные версии для не перечислений.
Вы не можете использовать этот трюк для создания методов расширения, потому что методы расширениядолжен быть определен в static
классе и не может наследовать другой класс.