【发布时间】:2011-12-09 13:07:54
【问题描述】:
C# 处理数组的方式与 C 或 C++ 大不相同。尽管它们确实具有固定的大小,但它将它们视为一件事的对象。所以我对 C# 中的数组有一些疑问:
如果我创建一个数组
new int[10],是否会保证 Length 属性为 10,或者如果我快要填满它,C# 是否会尝试调整数组的大小?如果我需要调整数组的大小,我是否必须创建一个更大的新数组,然后复制数组中的每个元素,或者我可以简单地添加更多空间而不复制元素。
编辑:看起来您可以使用 Array.Copy 复制数组。
- C# 中的 List 集合看起来像一个动态大小的数组(可能是数组和链表的混合)。如果我使用列表而不是数组,我可以控制它的大小吗? (即强制它的长度为 10,如果我需要更多空间,则将其大小设置为 20)
【问题讨论】:
-
对#2 使用 Array.Resize 而不是 Array.Copy。我相信它确实会在下面做一个副本。
-
如果我有一个未完全填充的数组(例如
{1, 2, null, 4, null}), Array.Resize 除了调整大小或保留空格外,还会压缩它(只需在末尾添加更多插槽)。 -
@jtfairbank,该数组已填充。假设数组是
int?[],它恰好填充了null。 (数组int[]将填充0,元素不能容纳null)。 -
@jtfairbank 不,它会将
null值保留在那里。无论如何,“插槽”将是默认值(T),在引用类型中表示null。