У меня есть это перечисление с атрибутом Flags
[Flags]
public enum Animal
{
Null = 0,
Cat = 1,
Dog = 2,
CatAndDog = Cat | Dog
}
И я использую C # 7.3, который допускает ограничения типа, такие как:
where T : Enum
Я создаю некоторый метод расширения:
public static bool IsMoreOrEqualThan<T>(this T a, T b) where T : Enum
{
return (a & b) == b;
}
Возвращает true, если
1) Элементы перечисления сравнимы.Например: Animal.Cat
и Animal.Dog
несопоставимы.
AND
2) Элемент a больше или равен элементу b
Примеры:
Animal.Cat.IsMoreOrEqualThan(Animal.Null)//true
Animal.Cat.IsMoreOrEqualThan(Animal.Cat)//true
Animal.Cat.IsMoreOrEqualThan(Animal.Dog)//false
Animal.Cat.IsMoreOrEqualThan(Animal.CatAndDog)//false
==================================
Но яесть ошибка компиляции: Operator '&' cannot be applied to operands of type 'T' and 'T'
Кажется, разработчики .Net забыли разрешить побитовые операции между универсальными типами с ограничением типов where T : Enum
Может кто-нибудь знает ответ?