如果我在没有关于元素数量的预先信息的情况下积累数据,我可以使用数组并根据需要使用放大Redim Preserve
,但List通常会更有效.例如:
Dim vehicle As New List(Of String)(4)
vehicle.Add("car")
vehicle.Add("bicycle")
vehicle.Add("truck")
vehicle.Add("taxi")
vehicle.Add("motorbike")
vehicle.Add("bus")
Run Code Online (Sandbox Code Playgroud)
尽管我猜测4作为最大元素数是错误的,但我可以毫无问题地添加新元素.
我可以显示元素:
For inx = 0 To vehicle.Count - 1
Debug.Print(" " & inx & " " & vehicle(inx))
Next
Run Code Online (Sandbox Code Playgroud)
得到:
0 car
1 bicycle
2 truck
3 taxi
4 motorbike
5 bus
Run Code Online (Sandbox Code Playgroud)
我可以根据需要更新元素并重新显示:
vehicle(2) = "coach"
vehicle(4) = "cart"
For inx = 0 To vehicle.Count - 1
Debug.Print(" " & inx & " " & vehicle(inx))
Next
Run Code Online (Sandbox Code Playgroud)
要得到:
0 car
1 bicycle
2 coach
3 taxi
4 cart
5 bus
Run Code Online (Sandbox Code Playgroud)
我几乎可以轻松地创建结构列表:
Structure SpersonDtl
Dim familyName As String
Dim givenName As String
Dim age As Integer
End Structure
Dim personDtl As New List(Of SpersonDtl)(4)
Dim personDtlCrnt As SpersonDtl
personDtlCrnt.familyName = "Smith"
personDtlCrnt.givenName = "John"
personDtlCrnt.age = 20
personDtl.Add(personDtlCrnt)
personDtlCrnt.familyName = "Brown"
personDtlCrnt.givenName = "Clare"
personDtlCrnt.age = 21
personDtl.Add(personDtlCrnt)
personDtlCrnt.familyName = "Wilson"
personDtlCrnt.givenName = "David"
personDtlCrnt.age = 22
personDtl.Add(personDtlCrnt)
personDtlCrnt.familyName = "Fox"
personDtlCrnt.givenName = "Wendy"
personDtlCrnt.age = 23
personDtl.Add(personDtlCrnt)
Run Code Online (Sandbox Code Playgroud)
显示列表的内容:
For inx = 0 To personDtl.Count - 1
Debug.Print(" " & inx & " " & personDtl(inx).givenName & " " & _
personDtl(inx).familyName & " " & personDtl(inx).age)
Next
Run Code Online (Sandbox Code Playgroud)
得到:
0 John Smith 20
1 Clare Brown 21
2 David Wilson 22
3 Wendy Fox 23
Run Code Online (Sandbox Code Playgroud)
如果personDtl是一个数组,我可以轻松更新一个元素.为了纠正Wendy的年龄,我会写:
personDtl(3).age = 24
Run Code Online (Sandbox Code Playgroud)
但是,与列表相同的语句会导致下面的蓝线personDtl(3).age
和错误消息:" 表达式是一个值,因此不能作为赋值的目标. "
我发现的最佳解决方案是:
Dim personDtlCrnt As SpersonDtl
personDtlCrnt = personDtl(3)
personDtlCrnt.age = 24
personDtl(3) = personDtlCrnt 'Write back.
Run Code Online (Sandbox Code Playgroud)
在我的应用程序中,我正在将信息累积到大型复杂结构中.要从列表中复制元素,添加一个新的信息项,然后将其复制回来将不是一个有效的过程.
对于替代方法的任何建议,我将不胜感激.
归档时间: |
|
查看次数: |
13550 次 |
最近记录: |