You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 08:05:03