在 C# 中获取通用标志枚举值
Getting common flags enum value in c#
假设我有以下枚举
[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
。有人可以告诉我如何实现这一目标吗?
谢谢
您可以使用二元 &(和)运算符得到它:
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)
如果适合你,它会 return 个人标志列表
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))
正如您使用 |
获取值的并集一样,您可以使用 &
获取交集:
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
结果如下:
var result = s & p;
假设我有以下枚举
[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
。有人可以告诉我如何实现这一目标吗?
谢谢
您可以使用二元 &(和)运算符得到它:
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)
如果适合你,它会 return 个人标志列表
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))
正如您使用 |
获取值的并集一样,您可以使用 &
获取交集:
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
结果如下:
var result = s & p;