C#中如何向object类型的数组变量追加元素?
问题核心误区
你遇到的报错来自两个基础认知偏差:
- 初始化时赋值给
output的是string[]类型的定长字符串数组,C#中所有数组都是固定长度结构,创建后长度不可修改,本身不存在Add方法,因此不管是直接用object类型引用调用,还是转成Array类型调用,都找不到Add方法。 ((List<string>)output).Add("string4")的写法虽然能通过编译检查,但运行时必然抛出InvalidCastException:string[]和List<string>是完全独立的类型,不存在直接转换关系,编辑器不飘红只是因为output声明为object,编译器无法在编译期校验实际存储的类型。
规范实现方式
因为原数组是定长结构,追加元素的本质是创建长度+1的新序列,写入原有内容和新元素后重新赋值给output即可。
最简洁写法(推荐)
引入LINQ命名空间后,直接调用Append扩展方法,一行代码即可完成:
// 代码文件顶部引入命名空间 using System.Linq; // 追加元素并重新赋值 output = ((string[])output).Append("string4").ToArray();
无额外依赖写法
如果不想引入LINQ,可以直接用原生数组拷贝逻辑,不需要额外依赖:
string[] original = (string[])output; string[] newArray = new string[original.Length + 1]; original.CopyTo(newArray, 0); newArray[newArray.Length - 1] = "string4"; output = newArray;
频繁追加元素的优化写法
如果后续需要多次追加元素,不要每次追加都创建新数组,可以先转成List<string>完成所有操作后再转回数组赋值,减少性能开销:
List<string> tempList = ((string[])output).ToList(); // 多次追加操作都直接操作List即可 tempList.Add("string4"); tempList.Add("string5"); // 所有操作完成后统一赋值回output output = tempList.ToArray();
内容的提问来源于stack exchange,提问作者AJ Godinez
相关产品推荐
相关产品推荐

