名单(人)订单

时间:2013-02-16 13:53:52

标签: vb.net design-patterns

请查看以下代码:

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。您能否确认List使用广告订单。我打算将数据库查询的结果存储在一个列表中,例如:

SELECT * FROM Person ORDER BY ID

SQL语句按ID排序。我可以假设列表也将按ID排序吗?

我问的原因是因为我在这里回答了我的问题:Data Access Layer returns DataTable,建议使用List从数据访问层返回一个对象。

3 个答案:

答案 0 :(得分:3)

是的,列表会将您输入的对象存储起来。见List(Of T).Add

  

将一个对象添加到List(Of T)的末尾。

答案 1 :(得分:2)

你可以假设an IList会以这种方式行事,是的。除了枚举之外,它还提供了索引,因此列表的类型需要保持不变以支持它。

但是,如果您想要明确,您可以随时对其进行明确排序:

For Each p As Person In list.OrderBy(Function(pe) pe.IDNumber)

答案 2 :(得分:2)

另一种选择是使用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

我故意加扰了将项目添加到列表中的顺序。每当列表更改时,它都会运行排序算法以确保项目保持正确的顺序。根据您计划如何使用它,这可能会增加相当多的开销。