System.Enum与Flags的组合

时间:2012-09-04 10:53:04

标签: c# .net enums

请考虑以下枚举:

[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在枚举本身中没有位置。

3 个答案:

答案 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
}