如何在C#对象初始化时通过循环批量添加List子对象?
初始化阶段批量生成子对象并合并到主列表
C# 实现(支持类似JS的展开语法)
先定义实体类:
public class SubObject { public int Id { get; set; } public string Tag { get; set; } public int Value { get; set; } } public class MainObject { public List<SubObject> SubObjects { get; set; } = new List<SubObject>(); }
初始化时利用C# 9.0+的集合展开运算符..,结合LINQ的Enumerable.Range批量生成子对象,直接嵌入集合初始化器:
var mainObj = new MainObject { SubObjects = new List<SubObject> { // 先添加非批量的自定义子对象 new SubObject { Id = 0, Tag = "Tag.Special", Value = 999 }, // 批量生成ID 1-10的子对象,自动展开到列表中 ..Enumerable.Range(1, 10).Select(i => new SubObject { Id = i, Tag = $"Tag.Pos.{i}", Value = i * i }) } };
..运算符和JavaScript里的...作用完全一致,把LINQ生成的序列直接“展开”到当前集合,无需手动循环调用Add。
Java 实现
通过Stream API完成批量生成与合并:
先定义实体类:
class SubObject { private int id; private String tag; private int value; public SubObject(int id, String tag, int value) { this.id = id; this.tag = tag; this.value = value; } // 按需添加getter/setter } class MainObject { private List<SubObject> subObjects; public MainObject(List<SubObject> subObjects) { this.subObjects = subObjects; } }
初始化时用Stream.concat合并自定义子对象流和批量生成的子对象流:
MainObject mainObj = new MainObject( Stream.concat( // 自定义子对象流 Stream.of(new SubObject(0, "Tag.Special", 999)), // 批量生成ID 1-10的子对象 IntStream.rangeClosed(1, 10) .mapToObj(i -> new SubObject(i, "Tag.Pos." + i, i * i)) ).collect(Collectors.toList()) );
这种方式在构造MainObject的同时完成所有子对象的组装,避免了后续逐行添加的冗余代码。
内容的提问来源于stack exchange,提问作者Luis Pedro
相关产品推荐
相关产品推荐

