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
Perché il CType
lavoro e il DirectCast
non con la stessa sintassi? Ma se io scaccio il selectedValue
a un int
prima DirectCast
, allora funzionaDirectCast & Ctype differenze con le enumerazioni
saluti
_Eric
Grazie. Quale sarebbe la migliore pratica su questo? Inserisce esplicitamente il valore selezionato in int e directcast (n. 2), o solo Ctype (n. 3) – Eric
Preferisco CType ogni volta che ho a che fare con i valori enum – JaredPar
@Eric: un DirectCast deve essere usato quando un oggetto è di un determinato tipo e lo stai trasmettendo a quel tipo. Una stringa non è un Enum e nemmeno un intero. Se si desidera eseguire il cast su un intero per primo, ciò potrebbe rendere il codice più chiaro, ma l'uso di DirectCast confonderà le cose. – jmoreno