Les énumérations sont essentiellement une couche mince sur un type numérique primitif (par défaut Int32
). En interne, ils sont manipulés exactement comme des valeurs numériques et ils peuvent être moulés vers et depuis leur type sous-jacent facilement. Pour cette raison, il est important de noter que lorsque vous traitez avec Enums, vous devez faire attention à la gestion des valeurs qui vous sont transmises.
Enum eOpenMode
Add = 1
Edit = 2
End Enum
Dim myEnumVal as eOpenMode
myEnumVal = Cast(100, eOpenMode)
Ce code compile et fonctionne très bien et myEnumVal
contiendra une valeur de 100, qui ne sont pas mis en correspondance avec une valeur énumérée connue. Il serait alors légal pour moi de passer cette valeur à une méthode qui attend un argument eOpenMode
, même si ce n'est pas l'une des valeurs énumérées.
Assurez-vous de vérifier les valeurs enum à l'aide des instructions Switch
et de lancer ArgumentOutOfRangeException
si la valeur fournie n'est pas définie dans l'énumération.
En plus de cela, parce que les énumérations sont soutenus par les types numériques, ils peuvent également être utilisés comme masques-bit pour permettre une combinaison de valeurs:
<Flags>
Enum eOpenMode
Add = 1
Edit = 2
AddEdit = Add OR Edit
End Enum
Chaque fois que je pense à propos des types de valeur .NET, j'ai toujours finissent par me confondre pendant quelques minutes en pensant aux vtables et au casting. Espérons que j'ai bien compris ... – LorenVS