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
Tại sao công việc CType
và DirectCast
không có cùng cú pháp? Tuy nhiên, nếu tôi cast selectedValue
một int
trước khi tôi DirectCast
, sau đó nó hoạt độngSự khác biệt về Directcast & Ctype với enums
Trân
_Eric
Cảm ơn. Điều gì sẽ là thực hành tốt nhất về điều này? Rõ ràng đúc các lựa chọnValue đến một int và directcast (# 2), hoặc chỉ là Ctype (# 3) – Eric
Tôi thích CType bất cứ khi nào tôi đang đối phó với các giá trị enum – JaredPar
@Eric: một DirectCast nên được sử dụng khi một đối tượng là của một loại nhất định và bạn đang truyền nó đến loại đó. Một chuỗi không phải là một Enum, và không phải là một số nguyên. Nếu bạn muốn truyền tới một số nguyên đầu tiên, điều đó có thể làm cho mã của bạn rõ ràng hơn, nhưng việc sử dụng DirectCast sẽ chỉ gây nhầm lẫn cho mọi thứ. – jmoreno