Отрицательные флаги в C #

Эй, а есть ли способ хранить отрицательные флаги в 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

И если объект 3 также наследует значения 1 и 2, то окончательный результат должен быть просто Курсивом .

Другой пример в ответ на вопрос Кирена Джонстона , и согласно моему утверждению в комментарии, отрицательные значения применяются только на текущем уровне:

1: Bold
2: -Bold -Italic
3: Italic

2 удаляет жирный и курсив из предыдущих объектов, но не должен ' t применять дальше (положительные значения должны быть), поэтому окончательное значение будет снова курсивом .

8
задан poke 4 April 2011 в 10:35
поделиться