C#处理数组的方式与C或C ++的处理方式大不相同。它将它们视为一件事物的对象,尽管它们具有固定的大小。所以我对C#中的数组有一些疑问:
如果我创建一个数组new int[10]
,那么长度属性将保证为10,或者如果我接近填充它,C#会尝试调整数组的大小吗?
如果我需要调整数组大小,我是否必须创建一个更大的新数组,然后复制数组中的每个元素,或者我可以简单地添加更多空间而不复制元素。< / p>
编辑:看起来您可以使用Array.Copy
复制数组。
答案 0 :(得分:3)
1)是的,长度为10。
2)是的,您必须创建另一个并复制成员。 Array类为此提供了一种方法,但您无法避免复制。
3)列表确实更方便。您可以通过添加或删除成员来控制其长度(计数)。
因此,在C#中使用数组的频率较低。我们更喜欢List<T>
类(可能在封面下使用数组)。但他们确实会产生一些开销。
将数组用于低级别或固定大小的问题。此外,没有好的(快速)多暗列表类。
答案 1 :(得分:3)
如果我创建一个数组new int [10]将保证Length属性为10,或者如果我接近填充它,C#会尝试调整数组的大小吗?
它将是10.总是10。
如果我需要调整数组的大小,我是否必须创建一个具有更大尺寸的新数组,然后复制数组中的每个元素,或者我可以简单地添加更多空间而不复制元素。
您需要调整大小并复制。有一些辅助方法可以使这更容易,例如Array.Resize
- 但不要误以为它正在创建一个新数组并使用Array.Copy
将所有内容放在那里。如果您需要可调整大小的集合,请使用List<T>
。
C#中的List集合看起来像一个动态大小的数组(可能是数组和链表之间的混合)。如果我使用List而不是数组,我可以控制它的大小吗? (即强制它为长度10,如果我需要更多空间,则将其大小设置为20)。
自动控制尺寸。它会在需要时增长。有一个构造函数重载来接受初始大小。在内部,它还使用在需要时调整大小的数组。什么时候填满;它以当前容量的两倍增长,并复制列表中新底层数组中的所有内容。但所有这些魔力都发生在幕后。如果要手动调整List<T>
的内部数组,请将Capacity
属性设置为项目数。
答案 2 :(得分:2)
答案 3 :(得分:2)
答案 4 :(得分:1)
容量是List(Of T)可以存储的元素数 在需要调整大小之前,Count是元素的数量 实际上在List(Of T)中。
答案 5 :(得分:1)
阵列具有固定大小。如果要更改数组的大小,请分配一个新数组,然后使用Array.Copy(或Array.Resize)将项目复制到其中。
如果您经常这样做,建议使用List<T>
。这可以为你处理所有的大小调整。您可以在创建列表时指定初始容量,但如果添加的容量超过容量,则会自动调整后备阵列的大小以适应额外的项目。
答案 6 :(得分:1)
快速肮脏;)
NO
YES
如果您构建没有容量的列表,它将会增长。您可以使用构造函数设置最大大小,如...
List<string> list = new List<string>(10);