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
Dlaczego CType
praca i DirectCast
nie z tej samej składni? Jednak gdybym rzucił selectedValue
do int
zanim DirectCast
, to działaDirectCast i typu C różnice z teksty stałe
Pozdrowienia
_Eric
Dzięki. Jaka byłaby najlepsza praktyka w tej dziedzinie? Jawne rzucanie wybranej wartości do int i directcast (# 2) lub po prostu Ctype (# 3) – Eric
Wolę CType, gdy mam do czynienia z wartościami wyliczeniowymi – JaredPar
@Eric: DirectCast powinien być używany, gdy obiekt jest danego typu i rzucasz go do tego typu. Łańcuch nie jest enumem, a żadna nie jest liczbą całkowitą. Jeśli chcesz najpierw rzutować na liczbę całkowitą, może to sprawić, że Twój kod będzie bardziej przejrzysty, ale użycie DirectCast po prostu wprowadzi zamieszanie. – jmoreno