我有一个从数据库加载列表的简单子程序。我希望能够通过将列表类型定义为通用抽象基类 ListControl 来使用相同的代码来加载 ListBox 和 ComboBox,并且看不出为什么我不能 - 除了 VB.NET 不公开/implement/whatever ListControl 中的 Items 集合。我沮丧地注意到,在 ASP.NET 中并非如此。目前我的代码很难看,因为我必须检查传入的列表控件类型,以便将其转换为具有 Items 集合的类型。(由于许多其他原因,我的代码可能也很丑陋,但对我来说很漂亮)。有没有办法重写代码以避免必须通过测试和铸造废话?(我已经将它剥离了一些,所以剩下的就是问题所在)。
Sub loadList(ByVal db As SqlDatabase, ByVal strCommandText As String, lstHost As ListControl, Optional bClearList As Boolean = True, Optional bIsListBox As Boolean = True)
If bClearList Then
If bIsListBox Then
CType(lstHost, ListBox).Items.Clear()
Else
CType(lstHost, ComboBox).Items.Clear()
End If
End If
Dim dt As DataTable = db.ExecuteDataSet(db.GetSqlStringCommand(strCommandText)).Tables(0)
For i = 0 To dt.Rows.Count - 1
If bIsListBox Then
CType(lstHost, ListBox).Items.Add(dt.Rows(i)(0).ToString)
Else
CType(lstHost, ComboBox).Items.Add(dt.Rows(i)(0).ToString)
End If
Next
End Sub