Я пытаюсь создать инверсию помеченного перечисления. Ниже приведено перечисление:
[Flags]
public enum MyType
{
Unknown = 0,
A = 1 << 0,
B = 1 << 2,
C = 1 << 3,
D = 1 << 4,
E = 1 << 5,
F = 1 << 6
}
Я определил статический MyType mtGroup1
со значением (A | B)
. Я хотел бы сгенерировать инверсию этого, исключая Unknown
.
Мое решение:
MyType t = MyType.Unknown;
foreach (var vType in Enum.GetValues(typeof(MyType)).OfType<MyType>())
{
if ((mtGroup1 & vType) != vType)
t = t | vType; //Consolidates into a single enum, excluding unknown
}
Результирующее значение t
равно C | D | E | F
, что является желаемым результатом. Этот метод работает, но я надеялся, что существует более простой способ консолидации, как показано выше, с использованием LINQ (другие способы, отличные от LINQ, также приемлемы, если они проще).
Спасибо!