Question

Existe-t-il un moyen de combiner des énumérations dans VB.net ?

Était-ce utile?

La solution

Je crois que ce que vous voulez, c'est une énumération de type drapeau.

Vous devez ajouter l'attribut Flags en haut de l'énumération, puis vous pouvez combiner les énumérations avec le mot-clé « Ou ».

Comme ça:

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

Note: Les chiffres à droite sont toujours deux fois plus grands (puissances de 2) - cela est nécessaire pour pouvoir séparer les différents drapeaux posés.

Combinez les drapeaux souhaités à l'aide du mot-clé Ou :

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

Cela définit TitleBar et Readonly dans l'énumération

Pour vérifier ce qui a été défini :

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

Autres conseils

Vous pouvez utiliser le FlagsAttribute pour décorer un Enum comme ceci, ce qui vous permettra de combiner l'Enum :

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

Et puis appelez-les ainsi (classe UserPriviltes) :

Public Sub New ( _
    options As SecurityRights _
)

New UserPrivileges(SecurityRights.Read OR SecurityRights.Execute)

Ils sont effectivement combinés (calculs binaires) de sorte que l'utilisateur ci-dessus ait à la fois Lire ET Exécuter dans une seule variable SecurityRights sophistiquée.

Pour vérifier si l'utilisateur dispose d'un privilège, vous utilisez AND (plus de calculs au niveau du bit) pour vérifier la valeur enum de l'utilisateur avec la valeur Enum que vous recherchez :

//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 je comprends bien votre question, vous souhaitez combiner différents types d'énumérations.Ainsi, une variable peut stocker une valeur provenant de l'une des deux énumérations différentes, n'est-ce pas ?Si vous souhaitez stocker la combinaison de deux valeurs différentes d'un même type d'énumération, vous pouvez consulter l'explication de Dave Arkell.

Les énumérations ne sont que des entiers avec un peu de sucre syntaxique.Donc, si vous vous assurez qu'il n'y a pas de chevauchement, vous pouvez les combiner en les convertissant en int.

Cependant, cela ne donnera pas un joli code.J'essaie d'éviter d'utiliser des énumérations la plupart du temps.Habituellement, si vous laissez les énumérations se reproduire dans votre code, ce n'est qu'une question de temps avant qu'elles ne donnent naissance à des instructions case répétées et à d'autres anti-modèles désordonnés.

La clé de la combinaison Enums est de s'assurer que la valeur est une puissance de deux (1, 2, 4, 8, etc.) afin que vous puissiez effectuer des opérations sur les bits (|= &=).Ceux Enums peuvent être étiquetés avec un Flags attribut.Le Anchor La propriété sur les contrôles Windows Forms est un exemple d’un tel contrôle.S'il est marqué comme indicateur, Visual Studio vous permettra de vérifier les valeurs au lieu d'en sélectionner une seule dans une liste déroulante du concepteur de propriétés.

Si vous envisagez d'utiliser enum flags(), il y a un bon article ici.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top