请查看以下代码:
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从数据访问层返回一个对象。
答案 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
我故意加扰了将项目添加到列表中的顺序。每当列表更改时,它都会运行排序算法以确保项目保持正确的顺序。根据您计划如何使用它,这可能会增加相当多的开销。