请考虑以下枚举:
[System.Flags]
public enum EnumType: int
{
None = 0,
Black = 2,
White = 4,
Both = Black | White,
Either = ???, // How would you do this?
}
目前,我编写了一个扩展方法:
public static bool IsEither (this EnumType type)
{
return
(
((type & EnumType.Major) == EnumType.Major)
|| ((type & EnumType.Minor) == EnumType.Minor)
);
}
有没有更优雅的方法来实现这一目标?
更新:从答案中可以看出,EnumType.Either在枚举本身中没有位置。
答案 0 :(得分:9)
使用标记枚举,“任意”检查可以推广到(value & mask) != 0
,所以这是:
public static bool IsEither (this EnumType type)
{
return (type & EnumType.Both) != 0;
}
假设 您修复了以下事实:
Both = Black | White
(因为Black & White
是一个错误,这是零)
为了完整性,可以将“全部”检查推广到(value & mask) == mask
。
答案 1 :(得分:1)
为什么不简单:
public enum EnumType
{
// Stuff
Either = Black | White
}
答案 2 :(得分:-1)
怎么样:
[System.Flags]
public enum EnumType: int
{
None = 0,
Black = 1,
White = 2,
Both = Black | White,
Either = None | Both
}