如何扩大在C#中的数组,而不使用new关键字(How do I expand an array in

2019-09-21 05:51发布

我在C#中的字符数组。

var arr = new char[3] { 'a','b','c' };

如何添加空格它的结束,而无需创建一个新的数组?

结果: arr = { 'a', 'b', 'c', ' ', ' ', ' ' };

这听起来类似VB.NET的ReDim 。 但我不知道那是什么,我想无论是。 我想保留它里面的内容,而不是实例化幕后的新数组。

这是唯一可能与泛型集合和ArrayList?

谢谢

Answer 1:

不,这是不可能的使用数组,通用或以其他方式..据我所知,是没有办法来动态调整大小的数组。 使用列表来代替。

由于马丁在评论中指出,即使是List类使用它的内部实现的数组。 如果你想真正能够动态调整数据结构,而不重新初始化,您必须实现自己的一个版本链表 。

System.Collections.Generic包含一个类中调用LinkedList的表示一个双向链表(即每个节点既下一个和前一个节点的引用),但我不知道它的内部实现使用数组..



Answer 2:

遗憾的是,数组是通过设计预先固定的。 因为它会在堆保留的内存必要的大写金额,这是非常重要的。

因此,要回答你的需求约没有创造一个新问题: 这是不可能的

然而,有,一个变通。 看看下面的方法:

Array.Resize(ref myArr, myArr.Length + 5);

它的工作原理是在源描述:

这个方法分配具有指定大小的新数组,从旧的数组元素复制到新的一个,然后替换旧序列与该新的。

如果数组为空,该方法创建具有指定大小的新数组。

如果新尺寸大于旧数组的长度时,一个新的数组分配,所有的元素都从旧阵列到新的复制。 如果新尺寸小于旧数组的长度,一个新的数组分配和元素从旧阵列到新的,直到新的一个被填充复制; 旧的数组中的元素的其余部分被忽略。 如果新尺寸等于旧数组的长度,这个方法不起作用。

此方法是一个为O​​(n),其中n是新尺寸。

这意味着myArr将被更新以引用新的阵列。 但是,如果有另一个参照原数组,这将不会被更新(它会继续引用旧版本)。

来源: MSDN



文章来源: How do I expand an array in C# without using the new keyword
标签: c# char arrays