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
Warum hat die CType
Arbeit und die DirectCast
nicht mit der gleichen Syntax? Doch wenn ich die selectedValue
zu einem int
bevor ich DirectCast
gegossen, dann funktioniert esDirect & Ctype Unterschiede mit Aufzählungen
Grüße
_Eric
Dank. Was wäre die beste Vorgehensweise dabei? Explizite Cast der ausgewähltenValue zu einem int und Directcast (# 2), oder nur Ctype (# 3) – Eric
Ich bevorzuge CType, wenn ich mit Enum-Werte – JaredPar
@Eric: ein DirectCast sollte verwendet werden, wenn ein Objekt von einem bestimmten Typ ist und du machst es auf diesen Typ. Eine Zeichenfolge ist keine Enumeration und keine Ganzzahl. Wenn Sie zuerst in eine Ganzzahl umwandeln möchten, macht das Ihren Code vielleicht klarer, aber die Verwendung von DirectCast wird die Dinge nur verwirren. – jmoreno