Как определить, имеет ли значение Enum одно или несколько значений, с которыми сравнивается?

Краткий ответ: не храните.

Чтобы предотвратить состояние гонки, IndexedDB предназначен для неявного фиксации, и, следовательно, вы НЕ должны явно сохранять транзакцию. Если это необходимо, измените свой алгоритм так, чтобы он не требовал его сохранения.

Повторное использование транзакции для выполнения и выполнения заказанных запросов. В этих случаях транзакция будет неявно оставаться в живых.

13
задан Paul Suart 9 March 2010 в 12:39
поделиться

6 ответов

Вы можете сделать это, объединив значения с | и проверив через и .

Чтобы проверить, содержит ли значение или из тегов:

if ((myValue & (Tag.PrimaryNav | Tag.HomePage)) != 0) { ... }

| объединяет перечисления, которые вы тестируете (побитовое), и & тесты с помощью побитового маскирования - если результат не равен нулю, у него установлен хотя бы один из них.

Если вы хотите проверить, установлены ли оба из них, вы также можете это сделать:

Tag desiredValue = Tag.PrimaryNav | Tag.HomePage;
if ((myValue & desiredValue) == desiredValue) { ... }

Здесь мы маскируем все, что нам не важно, и проверяем, что результирующее значение равно тому, что нас делает заботит (мы не можем использовать ! = 0 , как раньше, потому что это будет соответствовать либо значению, и здесь нас интересует оба ).

Некоторые ссылки:

27
ответ дан 1 December 2019 в 18:12
поделиться
var someEnumValue = Tag.PrimaryNav | Tag.HomePage;

Чтобы проверить, содержит ли перечисление заданное значение:

if ((someEnumValue & Tag.PrimaryNav) == Tag.PrimaryNav)
{

}
1
ответ дан 1 December 2019 в 18:12
поделиться

Вы можете использовать метод HasFlag, чтобы избежать необходимости использования булевой логики,

Tag Val = (Tag)9;

if (Val.HasFlag(Tag.PrimaryNav))
{
    Console.WriteLine("Primary Nav");
}

if(Val.HasFlag(Tag.HomePage))
{
    Console.WriteLine("Home Page");
}
9
ответ дан 1 December 2019 в 18:12
поделиться

Для поразрядных ( Flags ) перечислений тест «любой из» равен! = 0, итак:

const Tag flagsToLookFor = Tag.PrimaryNav | Tag.HomePage;
if ((node.Tag & flagsToLookFor) != 0) {
    // has some cross-over with PrimaryNav or HomePage (and possibly others too) 
}
2
ответ дан 1 December 2019 в 18:12
поделиться

Вы можете использовать библиотеку Джона Скита Unconstrained Melody :

var someEnumValue = Tag.PrimaryNav | Tag.HideChildPages;
someEnumValue.HasAny(Tag.PrimaryNav | Tag.HomePage); // Returns true
1
ответ дан 1 December 2019 в 18:12
поделиться
var tag = Tag.HideChildPages | Tag.PrimaryNav;

If ((tag & Tag.PrimaryNav) == Tag.PrimaryNav) {
    // Tag.PrimaryNav set.
}
1
ответ дан 1 December 2019 в 18:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: