已实例化的Object[]数组能否新增元素?附C#示例代码
问题解答
数组的核心特性
在C#中,普通数组(如你代码中的ObjectList[])一旦初始化完成,长度是固定的,无法直接修改数组长度来新增元素。所以你不能直接给已创建的长度为4的object1数组添加第5个元素。
借助临时数组实现"扩容"
虽然数组本身长度不可变,但可以通过临时数组转移元素的方式,间接实现类似新增元素的效果,具体步骤如下:
- 创建一个长度比原数组大1的新数组;
- 将原数组的所有元素复制到新数组中;
- 将新数组赋值给原数组变量;
- 给新数组的最后一个位置添加从
Console.ReadLine()获取的元素。
示例代码:
static void Main(string[] args) { Object objects = new Object(); objects.object1 = new ObjectList[4]; // 给原数组的元素初始化(示例) for (int i = 0; i < objects.object1.Length; i++) { objects.object1[i] = new ObjectList { name = $"原有元素{i}" }; } // 扩容并新增元素 ObjectList[] tempArray = new ObjectList[5]; Array.Copy(objects.object1, tempArray, objects.object1.Length); objects.object1 = tempArray; Console.WriteLine("请输入新元素的name:"); string newName = Console.ReadLine(); objects.object1[4] = new ObjectList { name = newName }; } public class Object { public ObjectList[] object1; } public class ObjectList { public string name; }
更简便的方案:使用List<T>
如果需要频繁动态添加元素,更推荐使用C#内置的List<T>集合,它支持自动扩容,直接调用Add()方法就能添加元素,无需手动处理数组复制:
修改后的代码示例:
static void Main(string[] args) { Object objects = new Object(); // 初始化容量为4的List(容量可自动扩容) objects.objectList = new List<ObjectList>(4); // 添加初始元素(示例) for (int i = 0; i < 4; i++) { objects.objectList.Add(new ObjectList { name = $"原有元素{i}" }); } // 直接新增元素 Console.WriteLine("请输入新元素的name:"); string newName = Console.ReadLine(); objects.objectList.Add(new ObjectList { name = newName }); // 此时List的元素数量为5 } public class Object { // 将数组替换为List<ObjectList> public List<ObjectList> objectList; } public class ObjectList { public string name; }
内容的提问来源于stack exchange,提问作者Aleksandar
相关产品推荐
相关产品推荐

