C# 是否可以在不初始化内部对象的情况下将阵列初始化为容量?

C# 是否可以在不初始化内部对象的情况下将阵列初始化为容量?,c#,arrays,C#,Arrays,考虑到我知道所需阵列的长度和类型,我可以这样做: KnownType arrayName = new KnownType[knownSize]; 但是这个代码也会初始化内部对象,考虑一个简单的从另一个数组复制到这个新数组的情况。我不需要初始化这些内部对象。我只需要一个空的空间来存放这些物品 有没有一种方法可以在不初始化内部对象的情况下创建具有特定容量的数组?请考虑以下问题: var myArray = new KnownType[10]; 这将为10个项目创建空间,但不会创建项目。然后你可以

考虑到我知道所需阵列的长度和类型,我可以这样做:

KnownType arrayName = new KnownType[knownSize];

但是这个代码也会初始化内部对象,考虑一个简单的从另一个数组复制到这个新数组的情况。我不需要初始化这些内部对象。我只需要一个空的空间来存放这些物品

有没有一种方法可以在不初始化内部对象的情况下创建具有特定容量的数组?

请考虑以下问题:

var myArray = new KnownType[10];
这将为10个项目创建空间,但不会创建项目。然后你可以做:

myArray[0] = new KnownType();
这将初始化对象

有没有一种方法可以在不初始化内部对象的情况下创建具有特定容量的数组

简言之:不。您总是被默认值卡住

在创建
新的
阵列时

新运算符用于创建数组并将数组元素初始化为其默认值

在这种情况下,引用类型将获得
null

初始化默认值听起来很合理,因为内存已经分配,不能用于其他任何事情。那么,为什么不先初始化这些值呢

以下是文档中的示例:

int[] array = new int[5];
此数组包含从数组[0]到数组[4]的元素。[…]在本例中,所有数组元素都初始化为零

编辑:区分参考值类型

考虑以下数组声明:

此语句的结果取决于SomeType是值类型还是引用类型。如果它是值类型,则该语句将创建一个包含10个元素的数组,每个元素都具有SomeType类型。如果SomeType是引用类型,则该语句将创建一个包含10个元素的数组,每个元素都初始化为空引用


@Mong Zhu的答案直指问题的根源,但我认为值得指出的是,其他一些容器,例如
List
,具有接受容量并允许预分配的构造函数,在引用类型的情况下,例如类,对象将不会初始化-容器将只分配空间并用空值填充空间

可容纳容量的列表:

List(Int32)
初始化List类的新实例,该实例为空且具有指定的初始容量


你测试过这个吗?是什么让你说‘这个代码也会初始化内部对象’?你说的是结构或类的数组吗?如果我在何处执行“int arrName=new int[5]”,我可以访问元素,它们将是它们的默认值0。我想我们需要讨论一下引用和值类型。只有值类型用它们的默认值初始化,才能创建项,但它们是使用默认值创建的:引用类型为Null,值类型为零值。但这是通过与
ZeroMemory()
等效的方法实现的,而不是通过调用构造函数question@TheGeneral不仅是你;)这就是为什么我建议使用
List(Int32)
。我知道这不是一个数组,而是一个容器。@tymtam我知道,但我想问题是:“有没有办法创建数组?”
SomeType[] array4 = new SomeType[10];