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
Почему CType
работы и DirectCast
не с тем же синтаксисом? Тем не менее, если бы я бросил selectedValue
к int
, прежде чем я DirectCast
, то он работаетDirectCast и CTYPE различие с перечислениями
С уважением
_Eric
Спасибо. Какая была бы лучшая практика? Явное выделение selectedValue для int и directcast (# 2) или просто Ctype (# 3) – Eric
Я предпочитаю CType всякий раз, когда я имею дело с значениями перечисления – JaredPar
@ Эрик: DirectCast следует использовать, когда объект имеет данный тип , и вы отбрасываете его на этот тип. Строка не является Enum, и ни одно из них не является целым числом. Если вы хотите сначала перенести в целое число, это может сделать ваш код более понятным, но использование DirectCast просто смутит. – jmoreno