データベースからリストをロードする単純なサブルーチンがあります。リストタイプを共通の抽象基本クラスListControlとして定義することで、同じコードを使用してListBoxとComboBoxをロードできるようにしたいのですが、VB.NETが公開しないことを除いて、できない理由はわかりません。 ListControlのItemsコレクションを/implement/whatever。これは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