0

ユーザーのセットを返す関数を作成しようとしています。しかし、後でアイテムをコレクションに追加できるようにするために、arrayListを使用しましたが、最終的に次のエラーが発生します Type ArrayList cannot be converted to 1-Dimensional array of Users

ここに私のコードがあります:

Function getDoctorsList() As Users()
    Dim userCollection As New ArrayList
    Dim sql = "SELECT * FROM '" + _tblName + "' WHERE usertype = 'doctor'"
    Dim dr As SqlDataReader = dbHelper.ExecuteAndGetReader(sql)
    While dr.Read
        Dim user As New Users
        user.Id = IIf(IsDBNull(dr("id")), 0, dr("id"))
        user.UserName = IIf(IsDBNull(dr("username")), "", dr("username"))
        user.UserNin = IIf(IsDBNull(dr("user_nin")), 0, dr("user_nin"))
        user.UserType = IIf(IsDBNull(dr("usertype")), "", dr("usertype"))
        user.Password = IIf(IsDBNull(dr("password")), "", dr("password"))
        userCollection.Add(user)
    End While
    Return userCollection
End Function

そのような問題を解決する方法は?

4

1 に答える 1

1

メソッドに次の値を返すようにしますArrayList

Function getDoctorsList() As ArrayList()

あなたの外に作成ArrayしますArrayList

Return userCollection.ToArray()

または、最善の解決策として、メソッドがIEnumerable(Of User)

Function getDoctorsList() As IEnumerable(Of User)

List(of User)a の代わりに a を使用する必要があります。ArrayListこれは、タイプ セーフ (かつ明確) であり、 も実装しているためIEnumerable(Of User)です。


編集

IEnumerable(of Users)と を使用した例DataRowExtensions:

Function GetDoctorsList() As IEnumerable(of Users)
    Dim sql = "SELECT * FROM '" + _tblName + "' WHERE usertype = 'doctor'"
    Dim table = new DataTable()
    table.Load(dbHelper.ExecuteAndGetReader(sql))
    Return (from row in table.AsEnumerable()
            select new User() With
            {
               .Id = row.FieldOf(Of Integer)("id"),
               .UserName = row.Field(Of String)("username"),
               .UserNin = row.Field(Of Integer)("user_nin"),
               .UserType = row.Field(Of String)("usertype"),
               .Password = row.Field(Of String)("password")
            }).ToList()
End Function
于 2012-08-23T08:16:16.393 に答える