我想找一种方法来检查我的变量中是否包含一组值。
[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#中编写它。
答案 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;
}
如果您的意思是“完全一个”,我只会使用switch
或if
等。
答案 1 :(得分:1)
为了更简单地“检查”这些值,您可能需要检查CodePlex上的Umbrella。他们构建了一些漂亮而可爱的扩展方法,用于验证枚举上的位标志。是的,这是一个抽象,但我认为我们应该更多地关注可读性而不是实现本身。
享受。
答案 2 :(得分:-2)
我想这样,如果我正确理解了这个问题
if (combinations == Combinations.Type1CategoryB | Combinations.Type2CategoryB)