Есть такой 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
for (long val = (long)TypeMoEnum.ForRouteCard; val <= maxEnumValue; val++)
{
if ((val & (long)TypeMoEnum.ForRouteCard) != 0)
{
Console.WriteLine((TypeMoEnum)val);
}
}
Комментариев нет:
Отправить комментарий