¿Hay alguna forma de combinar entradas en VB.net?Combinación de entradas
Respuesta
Creo que lo que quiere es un enum de tipo bandera.
Debe agregar el atributo Flags a la parte superior de la enumeración, y luego puede combinar enumeraciones con la palabra clave 'O'.
De esta manera:
<Flags()> _
Enum CombinationEnums As Integer
HasButton = 1
TitleBar = 2
ReadOnly = 4
ETC = 8
End Enum
Nota: Los números a la derecha siempre son dos veces más grandes (potencias de 2) - esto es necesario para poder separar las banderas individuales que se han establecido.
Combinar las banderas deseadas usando la palabra clave O:
Dim settings As CombinationEnums
settings = CombinationEnums.TitleBar Or CombinationEnums.Readonly
Esto establece TitleBar y Sólo lectura en la enumeración
Para comprobar lo que se ha establecido:
If (settings And CombinationEnums.TitleBar) = CombinationEnums.TitleBar Then
Window.TitleBar = True
End If
Si toma sobre usar enum flags() hay un buen artículo here.
Si entiendo su pregunta correctamente, quiere combinar diferentes tipos de enumeración. Entonces, ¿una variable puede almacenar un valor de uno de los dos enum's right? Si está preguntando sobre el almacenamiento de la combinación de dos valores diferentes de un tipo de enumeración, puede consultar la explicación de Dave Arkell
Los mensajes son solo enteros con algo de azúcar sintáctico. Entonces, si se asegura de que no haya superposición, puede combinarlos mediante conversión 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 a luz declaraciones de casos repetidos y otros antipatrones sucios.
La clave de la combinación Enum
s es asegurarse de que el valor es una potencia de dos (1, 2, 4, 8, etc.) de manera que se pueden realizar operaciones de bits en ellos (|=
&=
). Esos Enum
s se pueden etiquetar con un atributo Flags
. La propiedad Anchor
en los controles de Windows Forms es un ejemplo de dicho control. Si está marcado como indicador, Visual Studio le permitirá verificar los valores en lugar de seleccionar uno solo en un menú desplegable en el diseñador de propiedades.
Potencias de dos: ¡no olvide 1 = 2^0! –
También siempre es bueno proporcionar un valor 0 para "ninguno". – Nyerguds
Puede utilizar el FlagsAttribute para decorar un Enum como tal que le permitirá combinar el Enum:
<FlagsAttribute> _
Public Enumeration SecurityRights
None = 0
Read = 1
Write = 2
Execute = 4
Y luego llamarlos así como UserPriviltes (clase):
Public Sub New (_
options As SecurityRights _
)
New UserPrivileges(SecurityRights.Read OR SecurityRights.Execute)
Ellos obtener efectivamente combinado (matemáticas bits) para que el usuario anterior tiene tanto leer y ejecutar todos ellos llevados alrededor en una variable de fantasía SecurityRights.
Para comprobar para ver si el usuario tiene un privilegio utiliza Y (más matemáticas a nivel de bits) para comprobar los usuarios del valor de enumeración con el valor de enumeración se esté examinando para:
//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
¿por qué no usar un BitVector32? – Maslow
@abatishchev Eso no es lo que obtuve del artículo. 'Nombrar el valor cero de enumeraciones de banderas Ninguna' ...' el valor siempre debe significar que todas las banderas están despejadas'. Lo que dice es que no debe usar cero para significar algún estado adicional, sino que cero significa que no hay estado (es decir, "ninguno"). –
-1. Ha arruinado el uso de
- 1. Combinación de fusiones en una sola combinación
- 2. SQL combinación izquierda (múltiple condición de combinación)
- 3. Entradas APP
- 4. unix: cómo gato de 2 entradas?
- 5. Eliminando entradas de LD_LIBRARY_PATH
- 6. ¿Entradas de varios archivos?
- 7. Combinación única de frecuencias
- 8. documentos de combinación
- 9. de combinación aleatoria especie
- 10. Combinación de dos SyndicationFeeds
- 11. compleja consulta de combinación
- 12. vb.net combinación de teclas
- 13. ¿Combinación de filtros RSpec?
- 14. Hash de combinación/concatenación
- 15. Combinación de predicados
- 16. combinación de Java Guava de Multimap y Cache
- 17. Necesita un enfoque instrucción SQL en la combinación de mesas pero las entradas siempre con la identificación única
- 18. Función de combinación de unión externa canónica
- 19. jQuery: Forma entradas de compensación
- 20. Referencias ilegales y entradas
- 21. GetAccessRules duplicados, FileSystemAccessRule & entradas
- 22. rieles capitalizar check_box_tag entradas
- 23. GWT .hgignore/.gitignore entradas
- 24. Entradas múltiples con MRJob
- 25. Entradas en/proc/meminfo
- 26. Combinación de matrices de NumPy
- 27. Eliminar entradas del calendario
- 28. Entradas duplicadas en ListView
- 29. Diferencia entre la combinación izquierda y la combinación externa izquierda
- 30. ¿La combinación interna es igual que la combinación equi?
Gran respuesta. En caso de que no sea inmediatamente obvio, (como señala Jonas Follesø en su respuesta), la clave para esto es usar los valores de Enum a la potencia de 2 (1,2,4,8,16, etc.) – Andrew
. usando .NET 4, entonces puedes usar el método .HasFlag para hacer que el código sea un poco más fácil de leer - Si settings.HasFlag (CombinationEnums.TitleBar) Then blah blah –