在C#中获取通用标志枚举值

时间:2018-08-22 21:38:44

标签: c# enums enum-flags

说我有下面的枚举

[Flags]
enum Letters
{
     A = 1,
     B = 2,
     C = 4,
     D = 8,
     E = 16,
     F = 32,
     AB = A | B,
     All = A | B | C,
}

如果我有变量:

var s = Letters.A | Letters.B | Letters.D;
var p = Letters.A | Letters.C | Letters.D | Letters.E;

我想要得到这两个枚举之间的公共值,因此在这种情况下应该为A | D。有人可以告诉我如何实现这一目标。

谢谢

4 个答案:

答案 0 :(得分:7)

您可以使用二元&(和)运算符来获得它:

var s = Letters.A | Letters.B | Letters.D;
var p = Letters.A | Letters.C | Letters.D | Letters.E;
var sAndp = s & p; // This will give you only the common values ( A & D)

答案 1 :(得分:1)

就像您使用|获取值的并集一样,您可以使用&获取交集:

var s = Letters.A | Letters.B | Letters.D;
var p = Letters.A | Letters.C | Letters.D | Letters.E;

var intersection = s & p;  // A | D
var union = s | p;         // All | D | E

答案 2 :(得分:1)

这是结果:

    var result =  s & p;

答案 3 :(得分:0)

如果适合您,它将返回各个标志的列表

 static IEnumerable<Enum> GetFlags(Enum input)
    {
        foreach (Enum value in Enum.GetValues(input.GetType()))
            if (input.HasFlag(value))
                yield return value;
    }

GetFlags(s).Intersect(GetFlags(p))