Если у меня есть enum
, помеченный [Flags]
, есть ли способ в .NET проверить значение этого типа, чтобы увидеть, содержит ли оно только одно значение? Я могу получить желаемый результат, используя подсчет битов, но я бы предпочел использовать встроенные функции, если это возможно.
При динамическом циклическом просмотре значений enum
, Enum.GetValues()
также возвращает флаги комбинации. Вызов этой функции на enum
в следующем примере возвращает 4 значения. Однако я не хочу, чтобы значение комбинаций было включено во внутренний алгоритм. Тестирование отдельных enum
значений на равенство завершено, поскольку enum
потенциально может содержать много значений, а также требует дополнительного обслуживания при изменении значений в enum
.
[Flags]
enum MyEnum
{
One = 1,
Two = 2,
Four = 4,
Seven = One | Two | Four,
}
void MyFunction()
{
foreach (MyEnum enumValue in Enum.GetValues(typeof(MyEnum)))
{
if (!_HasSingleValue(enumValue)) continue;
// Guaranteed that enumValue is either One, Two, or Four
}
}
private bool _HasSingleValue(MyEnum value)
{
// ???
}
Связанный: StackOverflow: Enum.IsDefined на комбинированные флаги