运算符“&”不能应用于 'T' 和 'T' 类型的操作数,其中 T :枚举
Operator '&' cannot be applied to operands of type 'T' and 'T', where T : Enum
我有这个具有 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;
}
如果
returns 为真
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
也许有人知道答案?
我这样改方法
public static bool IsMoreOrEqualThan<T>(this T a, T b) where T : Enum
{
return (Convert.ToInt32(a) & Convert.ToInt32(b)) == Convert.ToInt32(b);
}
现在可以使用了
您可以使用 HasFlag 获得相同的结果。
我有这个具有 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;
}
如果
returns 为真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
也许有人知道答案?
我这样改方法
public static bool IsMoreOrEqualThan<T>(this T a, T b) where T : Enum
{
return (Convert.ToInt32(a) & Convert.ToInt32(b)) == Convert.ToInt32(b);
}
现在可以使用了
您可以使用 HasFlag 获得相同的结果。