gpt4 book ai didi

vb.net - 是否可以更新列表(结构)中的元素?

转载 作者:行者123 更新时间:2023-12-03 00:43:04 25 4
gpt4 key购买 nike

如果我在没有关于元素数量的预先信息的情况下积累数据,我可以使用一个数组并根据需要使用 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")

尽管我对 4 作为最大元素数的猜测是错误的,但我可以毫无问题地添加新元素。

我可以这样显示元素:

For inx = 0 To vehicle.Count - 1
Debug.Print(" " & inx & " " & vehicle(inx))
Next

并得到:

0 car
1 bicycle
2 truck
3 taxi
4 motorbike
5 bus

我可以根据需要更新元素并重新显示:

vehicle(2) = "coach"
vehicle(4) = "cart"

For inx = 0 To vehicle.Count - 1
Debug.Print(" " & inx & " " & vehicle(inx))
Next

获取:

0 car
1 bicycle
2 coach
3 taxi
4 cart
5 bus

我几乎可以轻松创建结构列表:

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)

显示列表的内容:

For inx = 0 To personDtl.Count - 1
Debug.Print(" " & inx & " " & personDtl(inx).givenName & " " & _
personDtl(inx).familyName & " " & personDtl(inx).age)
Next

给出:

0 John Smith 20
1 Clare Brown 21
2 David Wilson 22
3 Wendy Fox 23

如果 personDtl 是一个数组,我可以轻松更新元素。为了纠正温迪的年龄,我会写:

personDtl(3).age = 24

但是,使用列表的相同语句会导致 personDtl(3).age 下出现一条蓝线,并显示错误消息:“表达式是一个值,因此不能成为目标作业。

我发现的最佳解决方案是:

Dim personDtlCrnt As SpersonDtl

personDtlCrnt = personDtl(3)
personDtlCrnt.age = 24
personDtl(3) = personDtlCrnt 'Write back.

在我的应用程序中,我将信息积累到大型、复杂的结构中。要从列表中复制一个元素,添加一项新信息,然后将其复制回来,这不是一个有效的过程。

如果您有任何关于替代方法的建议,我将不胜感激。

最佳答案

尝试使用类而不是结构。

来自Choosing Between Classes and Structures

Consider defining a structure instead of a class if instances of the type are small and commonly short-lived or are commonly embedded in other objects.

Do not define a structure unless the type has all of the following characteristics:

  • It logically represents a single value, similar to primitive types (integer, double, and so on).

  • It has an instance size smaller than 16 bytes.

  • It is immutable.

  • It will not have to be boxed frequently.

If one or more of these conditions are not met, create a reference type instead of a structure. Failure to adhere to this guideline can negatively impact performance.

您希望通过更改其中一个值来使 SpersonDtl“结构”可变,这会破坏上面列出的特征之一。

关于vb.net - 是否可以更新列表(结构)中的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11461773/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com