Pregunta

¿Hay alguna manera de combinar enumeraciones en VB.net?

¿Fue útil?

Solución

Creo que lo que quieres es una enumeración de tipo bandera.

Debe agregar el atributo Flags en la parte superior de la enumeración y luego puede combinar enumeraciones con la palabra clave 'O'.

Como esto:

<Flags()> _
Enum CombinationEnums As Integer
  HasButton = 1
  TitleBar = 2
  ReadOnly = 4
  ETC = 8
End Enum

Nota: Los números de la derecha son siempre el doble de grandes (potencias de 2); esto es necesario para poder separar las banderas individuales que se han colocado.

Combine las banderas deseadas usando la palabra clave Or:

Dim settings As CombinationEnums
settings = CombinationEnums.TitleBar Or CombinationEnums.Readonly

Esto establece TitleBar y Readonly en la enumeración.

Para comprobar lo que se ha configurado:

If (settings And CombinationEnums.TitleBar) = CombinationEnums.TitleBar Then
  Window.TitleBar = True
End If

Otros consejos

Puedes usar FlagsAttribute para decorar un Enum de esta manera, lo que te permitirá combinar el Enum:

<FlagsAttribute> _
Public Enumeration SecurityRights
None = 0
Read = 1
Write = 2
Execute = 4

Y luego llámelos así (clase UserPriviltes):

Public Sub New ( _
    options As SecurityRights _
)

New UserPrivileges(SecurityRights.Read OR SecurityRights.Execute)

Se combinan efectivamente (matemáticas de bits) para que el usuario anterior tenga tanto Lectura como Ejecución en una elegante variable SecurityRights.

Para verificar si el usuario tiene un privilegio, use AND (más matemáticas bit a bit) para verificar el valor de enumeración de los usuarios con el valor de enumeración que está verificando:

//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

Hth, tyler

Si entiendo correctamente su pregunta, desea combinar diferentes tipos de enumeración.Entonces, una variable puede almacenar un valor de una de dos enumeraciones diferentes, ¿verdad?Si pregunta acerca del almacenamiento combinando dos valores diferentes de un tipo de enumeración, puede consultar la explicación de Dave Arkell.

Las enumeraciones son solo números enteros con algo de azúcar sintáctico.Entonces, si te aseguras de que no haya superposición, puedes combinarlos transmitiéndolos a int.

Sin embargo, no será un código bonito.Intento evitar el uso de enumeraciones la mayor parte del tiempo.Por lo general, si permite que las enumeraciones se reproduzcan en su código, es solo cuestión de tiempo antes de que den lugar a declaraciones de casos repetidas y otros antipatrones desordenados.

La clave de la combinación Enums es asegurarse de que el valor sea una potencia de dos (1, 2, 4, 8, etc.) para que pueda realizar operaciones de bits en ellos (|= &=).Aquellos Enums se pueden etiquetar con un Flags atributo.El Anchor La propiedad en los controles de Windows Forms es un ejemplo de dicho control.Si está marcado como una bandera, Visual Studio le permitirá verificar los valores en lugar de seleccionar uno solo en un menú desplegable en el diseñador de propiedades.

Si está hablando del uso de enum flags(), hay un buen artículo aquí.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top