初始化System.Array?

时间:2009-08-21 12:13:16

标签: .net vb.net

为什么Visual Basic编译器会抱怨?

Dim finalArray As Array = New Array

6 个答案:

答案 0 :(得分:4)

Array是一个抽象类(VB术语中为MustInherit)。您无法实例化抽象类。

答案 1 :(得分:2)

编辑:(在Joe Chung评论之后)

msdn:

  

MustInherit类不能   直接实例化,因此   New运算符不能用于   MustInherit类。 虽然是   可能有变量和值   编译时的类型是   MustInherit ,这样的变量和值   必然要么是空的   值或包含对的引用   派生常规类的实例   来自MustInherit类型。

答案 2 :(得分:2)

正如其他人所说,它会抱怨。敬畏是对的,你必须指定数组的类型和大小。您可以使用数组初始值设定项执行此操作:

Dim finalArray As Array = New Integer() {1, 2, 3}

但是当您将其分配给数组时,会丢失类型信息。最好这样做:

Dim finalArray As Integer() = {1, 2, 3}

这样你就可以通过索引访问一个整数数组,你仍然可以使用Array的所有方法。

答案 3 :(得分:1)

对我来说,你使用的是哪个版本的Visual Studio?

 Error  1   'New' cannot be used on a class that is declared 'MustInherit'. C:\Documents and Settings\---\My Documents\Visual Studio 2008\Projects\---\Default.vb   171 39  ---

答案 4 :(得分:1)

为什么不

Dim finalArray as New ArrayList()

真的,如果你只存储某种类型的对象,你应该使用泛型。

Dim finalArray as New List(Of Integer)
Dim finalArray as New List(Of String)
Dim finalArray as New List(Of YourFavoriteObject)

(并且不要是一个草率的VB6程序员......为构造函数和其他方法调用添加那些perens。)

答案 5 :(得分:0)

您必须指定数组的类型和大小:
创建String数组的示例,大小为5:

Dim finalArray As Array = Array.CreateInstance(GetType(String), 5)