VB.NET结构数组:没有.push_back可用?

时间:2014-03-09 14:40:06

标签: arrays vb.net structure push-back

我在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

感谢您的帮助!

3 个答案:

答案 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的结构,不需要定义类。