Есть ли способ объединить Enums в VB.net?
Объединение имен
Ответ 1
Я считаю, что вы хотите, это перечисление типа флага.
Вам нужно добавить атрибут Flags в верхнюю часть перечисления, а затем вы можете комбинировать перечисления с ключевым словом "Or".
Вот так:
<Flags()> _
Enum CombinationEnums As Integer
HasButton = 1
TitleBar = 2
ReadOnly = 4
ETC = 8
End Enum
Примечание: Цифры справа всегда вдвое больше (полномочия 2) - это необходимо, чтобы иметь возможность отделять отдельные установленные флаги.
Объедините нужные флаги с помощью ключевого слова Or:
Dim settings As CombinationEnums
settings = CombinationEnums.TitleBar Or CombinationEnums.Readonly
Это устанавливает TitleBar и Readonly в перечисление
Чтобы проверить, что было установлено:
If (settings And CombinationEnums.TitleBar) = CombinationEnums.TitleBar Then
Window.TitleBar = True
End If
Ответ 2
Вы можете использовать FlagsAttribute, чтобы украсить Enum таким образом, чтобы вы могли объединить Enum:
<FlagsAttribute> _
Public Enumeration SecurityRights
None = 0
Read = 1
Write = 2
Execute = 4
И затем назовите их так (класс UserPriviltes):
Public Sub New ( _
options As SecurityRights _
)
New UserPrivileges(SecurityRights.Read OR SecurityRights.Execute)
Они эффективно получают комбинированную (бит-математику), так что у вышеупомянутого пользователя есть как Read AND Execute, все переносимые в одной причудливой переменной SecurityRights.
Чтобы проверить, есть ли у пользователя привилегия, вы используете AND (более побитовая математика), чтобы проверить значение перечисления пользователей с помощью значения Enum, которое вы проверяете:
//Check to see if user has Write rights
If (user.Privileges And SecurityRights.Write = SecurityRigths.Write) Then
//Do something clever...
Else
//Tell user he can't write.
End If
НТН, Тайлер
Ответ 3
Если я правильно понимаю ваш вопрос, вы хотите объединить разные типы перечислений. Итак, одна переменная может хранить значение из одного из двух разных enum правильно? Если вы спрашиваете о сохранении комбинации двух разных значений одного типа перечисления, вы можете посмотреть объяснение Дейва Аркелла
Перечисления - это целые числа с синтаксическим сахаром. Поэтому, если вы убедитесь, что нет совпадений, вы можете объединить их, выполнив листинг в int.
Однако он не сделает для довольно кода. Я стараюсь не использовать перечисления большую часть времени. Обычно, если вы позволяете enums размножаться в вашем коде, это всего лишь вопрос времени, прежде чем они будут рождать повторные заявления о случаях и другие грязные антипаттеры.
Ответ 4
Ключом к комбинации Enum
является удостовериться, что это значение равно двум (1, 2, 4, 8 и т.д.), чтобы вы могли выполнять на них битовые операции (|=
&=
). Те Enum
могут быть помечены атрибутом Flags
. Свойством Anchor
для элементов управления Windows Forms является пример такого элемента управления. Если он помечен как флаг, Visual Studio позволит вам проверять значения вместо выбора одного в раскрывающемся списке конструктора свойств.
Ответ 5
Если вы используете флаги enum(), есть хорошая статья здесь.