我在VB.NET中定义了一个结构并从中创建了一个数组:
Public Struct MyStruct
Dim SomeValue As String
Dim SomeOtherValue As Double
End Struct
Public MyArr() As MyStruct
我想知道在VB.NET下是否有可用于数组的.push_back函数,就像在C ++中一样。
目前我正在重新整理+保留数组,并为新的空成员分配一个新的数组成员,这是一个非常类型的打字,在可读性方面不是很酷:
Redim Preserve MyArr(0 To MyArr.GetUpperbound(0) +1)
MyArr(MyArr.GetUpperbound(0)) = someNewItem
感谢您的帮助!
答案 0 :(得分:1)
这就是我的意思:
Dim lst As New List(Of MyStruct)
lst.Add(someNewItem)
假设您已声明:
Public Structure MyStruct
Dim SomeValue As String
Dim SomeOtherValue As Double
End Structure
如果您绝对需要使用数组,请尝试以下方法:
MyArr = MyArr.Union({someNewItem}).ToArray
答案 1 :(得分:1)
结构主要用于表现,但正如您使用的Redim Preserve
显然不是您的理由。
除非您有特定的理由使用结构,否则您应该使用类,并使用列表而不是数组:
Public Class MyClass
Dim SomeValue As String
Dim SomeOtherValue As Double
Public Sub MyClass(value As String, other As Double)
SomeValue = value
SomeOtherValue = other
End Sub
End Struct
Public MyList As New List(Of MyClass)
现在您可以轻松地将项目添加到列表中:
MyList.Add(New MyClass("Answer", 42))
答案 2 :(得分:1)
C ++标准模板库vector class提供了push_back方法。 C ++向量封装了可调整大小的数组。
正如@Neolisk所指出的,通用可调整大小数组的.Net等价物是List Of T(非通用版本更恰当地命名为ArrayList)。
您可以使用带有List of T的结构,不需要定义类。