组合枚举成员?

4

我希望能够确定一个枚举值是否属于某个组。请看下面的伪代码示例:

[Flags]
public enum Animals
{
  Dog = 1,
  Cat = 2,
  WildAnimal = Dog | Cat,
  Fly = 4,
  Bee = 8,
  Insect = Fly | Bee
}

public static bool IsInsect(Animals animals)
{
  return Animals.Insect.Qualifies(animals);
}

public static bool Qualifies(this Animals groupName, Animals value)
{
  //Is there a bitwise operation for it?
}
4个回答

7

2
if ((groupName & value) != 0)
    ...

0

在每个单独的枚举上放置一个描述属性或自定义属性,然后通过反射获取该信息。我在我的博客中提供了一个使用枚举的示例,标题为:

C# 使用对象上的扩展属性信息

希望对你有所帮助。


0

使用 "and" 并检查共同位:

return (groupName & value) > 0;

无法编译,因为它首先计算了 value > 0 的结果,然后再应用按位与运算,这是不可能的。 - Adam
这让我很好奇。正确的实现是>0还是!=0 - Adam
由于枚举默认具有带符号的基本类型,因此“正确”的实现应该是!=。但是,负标志值没有太多意义。因此,在实践中,我认为这并不重要。 - Christoffer Lette

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接