在Cum的枚举中设置

Vac*_*ano 5 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
}
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*ell 16

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

return (combinations
     & (byte)( Combinations.Type1CategoryB | Combinations.Type2CategoryB)) != 0;
Run Code Online (Sandbox Code Playgroud)

另外 - 如果你声明它Combinations combinations(而不是byte),你可以放弃(byte)

bool CheckForCategoryC(Combinations combinations)
{
    return (combinations & (Combinations.Type1CategoryB | Combinations.Type2CategoryB) ) != 0;
}
Run Code Online (Sandbox Code Playgroud)

如果你的意思是"正是其中之一",我只会使用switchif等.

  • 如果你打算这样做,那么声明`public enum Combinations:byte`也是一个好主意. (2认同)