我只是在看 help VB 中数组的页面,显然所有这些都是创建数组的可接受语法:
Dim numbers(4) As Integer
inquiriesByYearMonthDay = New Byte(20)()() {}
Dim sales()() As Double = New Double(11)() {}
请注意,第一个甚至没有 New
关键字,第二个只有 New
关键字,第三个同时使用 Dim
和 New
关键字。为什么会有如此多的不一致,您应该使用哪一个?我对第一个最好奇,因为甚至从未创建数组对象
最佳答案
实际上,只创建了第一个数组并可以使用。其他的只是声明为数组(或部分创建)。
Dim numbers(4) As Integer
Dim sales()() As Double = New Double(11)() {}
如 Intellisense 所示,numbers
已准备好使用。对于锯齿状数组 sales
- 一个数组数组 - 到目前为止,代码只是告诉它它将包含多少个数组。每一个都是 Nothing
因为代码没有创建或分配一个给任何槽:
声明 sales
的行实际上做了两件可能令人困惑的事情。它可以这样声明:
' at some point I will want an array of array of doubles named sales:
Dim sales()() As Double
' Ok, I need it to hold 12 double arrays:
sales = New Double(11)() {}
第一步声明变量和类型。第 2 步通过创建临时数组并分配它来定义“容器数组”。 (该链接试图用 inquiriesByYearMonthDay
来说明这一点 - 它在前面的 block 中声明。)
Sales 还没有准备好使用,它只是一堆Nothing
。
' Ok, I need the first array to hold 5 elements
sales(0) = New Double(4) {} ' 0 based, so 4 == 5 items
sales(0)(0) = 12.67 ' FINALLY we can use it
现在,sales(0)(0 thru 4)
可以存储数据。 sales(1)()
其余的还没有初始化。
New
并没有直接作用于sales
。它正在创建一个新的临时数组(在右侧),该数组立即分配给左侧 sales()
中的一个槽。
关键是:数组在给定大小后就可以使用了。因此,它们在功能上是相同的:
' create int array with 5 slots:
Dim numbers(4) As Integer
' declare array; assign empty 4 slot int array to it:
Dim numbers() As Int32 = New Int32(4) {}
第一个声明包括尺寸;第二个为它分配一个指定大小的(新)临时数组。也就是说,VB 可以推断大小:
Dim fishes As String() = {"cod", "salmon", "tuna", "perch", "barracuda"}
{...}
是另一个临时数组,VB 将其分配给“fishes”。
但是数组很笨重。 sales(6,3)
代表什么?为了使它们可读,您需要到处都有常量:foo = sales(SALES_MARCH, SALES_ZIGGY)
。就个人而言,我认为唯一好的数组是具有已知固定值的静态数组:
Dim Days As String() = {"sun", "mon", "tues"....}
否则,List(Of T)
、Dictionary(TK, TV)
、Collection(Of T)
和许多其他方法更容易使用、创建、管理和合作(他们自己调整!)
关于vb.net - 创建数组时什么时候需要使用 `New` 关键字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35003606/