Public Enum Fruit
Red_Apple = 1
Oranges
Ripe_Banana
End Enum
Private Sub InitCombosRegular()
Dim d1 As New Dictionary(Of Int16, String)
For Each e In [Enum].GetValues(GetType(Fruit))
d1.Add(CShort(e), Replace(e.ToString, "_", " "))
Next
ComboBox1.DataSource = d1.ToList
ComboBox1.DisplayMember = "Value"
ComboBox1.ValueMember = "Key"
ComboBox1.SelectedIndex = 0
End Sub
'This fails
Dim combo1 = DirectCast(ComboBox1.SelectedValue, Fruit) ' Fails
'these both work
Dim combo2 = DirectCast(CInt(ComboBox1.SelectedValue), Fruit) 'works
Dim combo3 = CType(ComboBox1.SelectedValue, Fruit) 'works
Pourquoi le travail CType
et DirectCast
ne pas la même syntaxe? Pourtant, si je jette l'selectedValue
à un int
avant DirectCast
, il fonctionnedifférences DirectCast & Ctype avec énumérations
Cordialement
_Eric
Merci. Quelle serait la meilleure pratique à ce sujet? Explicite cast la selectedValue à un int et directcast (# 2), ou simplement Ctype (# 3) – Eric
Je préfère CType chaque fois que j'ai affaire à des valeurs enum – JaredPar
@Eric: un DirectCast devrait être utilisé quand un objet est d'un type donné et vous le jetez à ce type. Une chaîne n'est pas un Enum, et aucun n'est un entier. Si vous voulez d'abord convertir un entier en entier, cela pourrait rendre votre code plus clair, mais utiliser DirectCast ne fera que créer des confusions. – jmoreno