0

以下のコードをご覧ください。

Public Class PersonTest

    Public Function ListTest()
        Dim list As List(Of Person) = New List(Of Person)
        Dim p1 As Person = New Person(1, "Ian")
        Dim p2 As Person = New Person(2, "Steven")
        Dim p3 As Person = New Person(3, "Sharon")
        list.Add(p1)
        list.Add(p2)
        list.Add(p3)
        For Each p As Person In list
            MsgBox(p.IDNumber)
        Next

    End Function

End Class

Public Class Person
    Public IDNumber As Integer
    Public Name As String

    Public Sub New(ByVal id As Integer, ByVal name As String)
        IDNumber = id
        name = name
    End Sub

End Class

Public Class Form1

    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Dim pt As PersonTest = New PersonTest
        pt.ListTest()
    End Sub
End Class

私はメッセージボックスが印刷することを期待しています:1,2,3それはそうします。リストが挿入順序を使用していることを確認できますか。データベースクエリの結果をリストに保存することを計画しています。

SELECT * FROM Person ORDER BY ID

SQLステートメントはID順に並べられています。リストもID順に並べられると思いますか?

私が尋ねる理由は、ここでの私の質問に対する回答者が次のとおりです。データアクセス層はDataTableを返し、リストを使用してデータアクセス層からオブジェクトを返すことを提案します。

4

3 に答える 3

3

はい、リストには入力されたとおりにオブジェクトが保存されます。List(Of T)を参照してください。追加:

List(Of T)の最後にオブジェクトを追加します。

于 2013-02-16T13:57:29.083 に答える
2

はい、このように動作するIList想定できます。単なる列挙の上では、インデックス付けも提供されるため、それをサポートするには、リストの種類を一定に保つ必要があります。

ただし、明示的にしたい場合は、いつでも明示的に並べ替えることができます。

For Each p As Person In list.OrderBy(Function(pe) pe.IDNumber)
于 2013-02-16T13:58:25.030 に答える
2

もう1つのオプションは、を使用することSortedListです。これは、指定されたキーとデフォルトの比較プログラムに基づいて内部的に順序を維持します(独自の比較プログラムを提供しない場合)。

    Dim list As New SortedList(Of Integer, Person)

    Dim p1 As Person = New Person(1, "Ian")
    Dim p2 As Person = New Person(2, "Steven")
    Dim p3 As Person = New Person(3, "Sharon")
    list.Add(p3.IDNumber, p3)
    list.Add(p1.IDNumber, p1)
    list.Add(p2.IDNumber, p2)

    For Each p As Person In list.Values
        MsgBox(p.IDNumber)
    Next

アイテムがリストに追加される順序を意図的にスクランブルしました。リストが変更されるたびに、並べ替えアルゴリズムが実行され、アイテムが正しい順序のままになるようになります。使用方法によっては、かなりのオーバーヘッドが発生する可能性があります。

于 2013-02-16T15:45:52.817 に答える