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

C#中如何向匿名对象的数组属性动态添加对象?

解决匿名对象动态添加元素的问题

我懂你的痛点——早期C#里匿名对象用得少,而且它天生有个关键限制:匿名对象的属性是只读的,初始化时用的数组也是固定长度的,这就是你没法直接给items动态添加元素的原因。不过咱们可以换个思路,先收集元素再生成最终的匿名对象,具体步骤如下:

1. 用列表动态收集产品项

匿名对象本身不可修改,但列表是可变的,我们可以先用列表来存放要添加的产品。注意要保证每个添加的匿名对象结构一致(属性名、类型完全匹配):

// 初始化空列表,用来收集产品
var itemsList = new List<object>();

// 更优雅的方式:如果循环里至少有一个元素,编译器会自动推断列表的匿名类型
// 比如先添加一个临时元素(如果循环可能为空,后续可以移除)
// itemsList.Add(new { name = "", value = 0, amount = 0 });

2. 遍历Modelos,向列表添加产品

在foreach循环里,把每个Modelo转换成对应的匿名对象,加入列表:

foreach (var modelo in Modelos)
{
    itemsList.Add(new { 
        name = modelo.ProductName, // 替换成你的Modelo实际属性名
        value = modelo.ProductValue,
        amount = modelo.ProductAmount
    });
}

3. 生成最终的匿名对象

最后把列表转换成数组,赋值给匿名对象的items属性,同时配置shippings部分:

var body = new { 
    items = itemsList.ToArray(),
    shippings = new[] { new { name = "Default Shipping Cost", value = 100 } } 
};

额外提示

  • 如果shippings也需要动态添加,同样可以用列表先收集元素,再转数组赋值。
  • 如果你用的是C# 7.0及以上版本,编译器能自动推断列表的匿名类型,不需要显式写List<object>——只要添加第一个匿名对象后,列表就会自动匹配该类型。

内容的提问来源于stack exchange,提问作者notExactlyAHero

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:48:56