Подтвердить что ты не робот

Объединение имен

Есть ли способ объединить Enums в VB.net?

4b9b3361

Ответ 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(), есть хорошая статья здесь.