Я хочу сделать что-то вроде этого: у меня есть перечисления с комбинированными помеченными значениями.
public static class EnumExtension
{
public static bool IsSet<T>( this T input, T matchTo )
where T:enum //the constraint I want that doesn't exist in C#3
{
return (input & matchTo) != 0;
}
}
Тогда я мог бы сделать:
MyEnum tester = MyEnum.FlagA | MyEnum.FlagB
if( tester.IsSet( MyEnum.FlagA ) )
//act on flag a
К сожалению, С# универсальный, где ограничения не имеют ограничений перечисления, только класс и структура. С# не видит перечисления как структуры (даже если они являются типами значений), поэтому я не могу добавлять такие типы расширений.
Кто-нибудь знает обходной путь?