在Cum的枚举中设置

时间:2009-12-21 20:36:07

标签: c# c#-3.0

我想找一种方法来检查我的变量中是否包含一组值。

[Flags]
public enum Combinations
{
    Type1CategoryA = 0x01,      // 00000001
    Type1CategoryB = 0x02,      // 00000010
    Type1CategoryC = 0x04,      // 00000100
    Type2CategoryA = 0x08,      // 00001000
    Type2CategoryB = 0x10,      // 00010000
    Type2CategoryC = 0x20,      // 00100000
    Type3 = 0x40                // 01000000
}

bool CheckForCategoryB(byte combinations)
{

    // This is where I am making up syntax

    if (combinations in [Combinations.Type1CategoryB, Combinations.Type2CategoryB])
        return true;
    return false;

    // End made up syntax
}

我从Delphi移植到.NET。这是用Delphi编写的相当简单的代码,但我不知道如何在C#中编写它。

3 个答案:

答案 0 :(得分:16)

如果你的意思是“至少有一面旗帜”:

return (combinations
     & (byte)( Combinations.Type1CategoryB | Combinations.Type2CategoryB)) != 0;

另外 - 如果您将其声明为Combinations combinations(而不是byte),则可以删除(byte)

bool CheckForCategoryC(Combinations combinations)
{
    return (combinations & (Combinations.Type1CategoryB | Combinations.Type2CategoryB) ) != 0;
}

如果您的意思是“完全一个”,我只会使用switchif等。

答案 1 :(得分:1)

为了更简单地“检查”这些值,您可能需要检查CodePlex上的Umbrella。他们构建了一些漂亮而可爱的扩展方法,用于验证枚举上的位标志。是的,这是一个抽象,但我认为我们应该更多地关注可读性而不是实现本身。

享受。

答案 2 :(得分:-2)

我想这样,如果我正确理解了这个问题

if (combinations == Combinations.Type1CategoryB | Combinations.Type2CategoryB)