C#中如何初始化类内的数组类型成员(运行时确定数量)
解决动态初始化AClass.Titles数组的问题
针对你遇到的运行时才能确定Title数量的场景,有几种实用的初始化方式,推荐优先使用动态集合替代固定长度数组:
推荐方案:用List<BClass>替代数组
数组的长度是固定的,无法动态添加元素,而List<T>支持动态增删,更适配这种不确定数量的场景。只需修改AClass的定义:
public class AClass { public int Ndx { get; set; } public string Author { get; set; } public List<BClass> Titles { get; set; } = new List<BClass>(); // 初始化空列表 }
填充数据时直接调用Add方法即可,无需提前关心数量:
var author = new AClass { Author = "张三" }; // 运行时逐个添加Title author.Titles.Add(new BClass { Ndx = 1, Title = "C#入门指南" }); author.Titles.Add(new BClass { Ndx = 2, Title = ".NET进阶实战" }); // 如果后续需要转换成数组,直接调用ToArray() BClass[] titleArray = author.Titles.ToArray();
坚持使用数组的两种方式
如果必须保留数组类型,可以用以下两种方式:
方式1:先收集所有元素再初始化数组
先用临时List<BClass>收集所有Title对象,确定数量后再转换成数组赋值:
var author = new AClass { Author = "李四" }; var tempTitles = new List<BClass>(); // 运行时添加数据 tempTitles.Add(new BClass { Ndx = 1, Title = "前端开发实战" }); tempTitles.Add(new BClass { Ndx = 2, Title = "React源码解析" }); // 初始化数组并赋值 author.Titles = tempTitles.ToArray();
方式2:先获取数量再创建数组
如果能提前通过接口或其他方式获取到Title的总数量,可以直接创建对应长度的数组,再逐个赋值:
var author = new AClass { Author = "王五" }; // 假设运行时获取到该作者有3个Title int titleCount = 3; author.Titles = new BClass[titleCount]; // 逐个填充数组元素 author.Titles[0] = new BClass { Ndx = 1, Title = "Python数据分析" }; author.Titles[1] = new BClass { Ndx = 2, Title = "机器学习实战" }; author.Titles[2] = new BClass { Ndx = 3, Title = "深度学习入门" };
内容的提问来源于stack exchange,提问作者Kev
相关产品推荐
相关产品推荐

