我有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
无法比较。
和
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
的泛型类型之间允许按位操作
也许有人知道答案吗?
你可以用HasFlag获得相同的结果。
我这样改变了我的方法
public static bool IsMoreOrEqualThan<T>(this T a, T b) where T : Enum
{
return (Convert.ToInt32(a) & Convert.ToInt32(b)) == Convert.ToInt32(b);
}
现在它有效