Страницы

Поиск по вопросам

четверг, 28 марта 2019 г.

Enum Flags получить все возможные комбинации с установленным значением

Есть такой Enum:
[Flags] public enum TypeMoEnum : long { [EnumMember] NotDefined = 0, [EnumMember] MO = 1, [EnumMember] Federal = 2, [EnumMember] Laboratory = 4, [EnumMember] CallCentre = 8, [EnumMember] ForRouteCard = 16 }
нужно получить все возможные комбинации чисел, которые определяли наличие выбранного члена ForRouteCard. Как это можно было бы реализовать ?
UPD: Условие >= 16 не подойдет, т.к. в дальнейшем могут быть добавлены другие члены енама 32,64 и.т.д


Ответ

При условии, что TypeMoEnum.ForRouteCard - последний флаг в enum, и что нужно перебрать только те значения, которые отображаются на enum:
var values = Enumerable.Range((int)TypeMoEnum.ForRouteCard, (int)TypeMoEnum.ForRouteCard) .Select(i => (TypeMoEnum)i);
foreach (var v in values) { Console.WriteLine(v); }
Если флаг не последний, то
long maxEnumValue = Enum.GetValues(typeof(TypeMoEnum)) .Cast() .Aggregate(0, (long a, long b) => a | b);
for (long val = (long)TypeMoEnum.ForRouteCard; val <= maxEnumValue; val++) { if ((val & (long)TypeMoEnum.ForRouteCard) != 0) { Console.WriteLine((TypeMoEnum)val); } }

Комментариев нет:

Отправить комментарий