Эй, есть ли способ хранить отрицательные флаги в C #?Например, у меня есть следующие перечисления флагов, которые представляют некоторые стили:
[Flags]
public enum Styles
{
Default = 0,
Bold = 1,
Italic = 2
}
Теперь у меня есть несколько объектов, к которым могут быть применены эти стили, а затем все связанные элементы объединяются (т.е. другой объект может наследовать некоторый ранее установленныйстили).В дополнение к этому, я хотел бы определить отрицательные флаги, которые в основном отменяют унаследованные стили.Таким образом, если ранее стиль был установлен на Styles.Bold | Styles.Italic
и объект наследует этот стиль, но имеет установленный отрицательный флаг Styles.Bold
, то результат должен быть просто Styles.Italic
.
. Есть ли механизм, который уже делаетэтот?Теперь я в основном придерживаюсь двух способов: во-первых, определяется NotXY
перечислимых значений, которые затем каким-то образом анализируются для исключения значений XY
, если они установлены.
Другой - просто определение двух полей, положительных и отрицательных флаговгде отрицательные флаги специально определены в дополнительном поле, и я получаю результирующие флаги, просто выполняя positiveFlags ^ negativeFlags
.
edit:
Если это неясно, мне нужно сохранитькаждый из этих промежуточных стилей объектов.Например, это может быть так:
object1: Default
object2: Bold
object3: -Bold Italic
И если object3 также наследует значения 1 и 2, то конечный результат должен быть просто Italic
.
Другой пример вответ на вопрос Кирен Джонстон, и согласно моему утверждению в комментарии, отрицательные значения применяются только на текущем уровне:
1: Bold
2: -Bold -Italic
3: Italic
2 удаляет жирный и курсивный из предыдущих объектов, но затем не должен применяться дальше(хотя положительные значения должны), поэтому окончательное значение снова будет Italic
.