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