如何不使用内置函数Resize()向C#数组中添加新元素?
不借助Array.Resize()向C#数组添加新元素的实现方法
当然可以实现。C#中的数组是固定长度的,无法直接在原数组上扩容添加元素——包括Array.Resize()本质上也是创建新数组、复制原元素、更新引用的过程。我们完全可以手动复刻这个逻辑,不依赖Array.Resize()。
方法一:手动循环复制元素
直接创建一个长度+1的新数组,用循环把原数组的元素逐个复制过去,再添加新元素:
string[] data = {"item-1", "item-2"}; // 创建长度比原数组多1的新数组 string[] newData = new string[data.Length + 1]; // 手动复制原数组所有元素 for (int i = 0; i < data.Length; i++) { newData[i] = data[i]; } // 添加新元素到新数组末尾 newData[newData.Length - 1] = "item-3"; // 将原数组引用指向新数组 data = newData; foreach(string i in data) { Console.WriteLine(i); }
方法二:使用Array.Copy()简化复制
如果允许使用Array.Copy()(它只是复制元素的工具方法,不是扩容专用的Array.Resize()),可以替代循环,让代码更简洁:
string[] data = {"item-1", "item-2"}; string[] newData = new string[data.Length + 1]; // 复制原数组所有元素到新数组的起始位置 Array.Copy(data, newData, data.Length); // 添加新元素 newData[2] = "item-3"; data = newData; foreach(string i in data) { Console.WriteLine(i); }
两种方法最终效果和原代码完全一致,都会输出:
item-1 item-2 item-3
内容的提问来源于stack exchange,提问作者Muhammad Bilal
相关产品推荐
相关产品推荐

