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

C# 如何使用一个集合的数值填充另一个空的对象集合

问题核心原因

你的foreach循环遍历的是刚实例化的空Collection<Billing>对象,没有可遍历的元素自然不会进入循环执行赋值逻辑,同时你对order集合调用Select()的用法也不正确,Select()返回的是集合序列,不能直接转为int或字符串赋值给单个字段。

正确实现方案

默认场景为每个Order对象对应映射为一个Billing对象,修正后代码如下:

public async Task<Collection<Billing>> MapOrderToBilling(Collection<Order> order)
{
    Collection<Billing> items = new Collection<Billing>();
    // 遍历入参的Order集合,而非空的Billing集合
    foreach (var orderItem in order)
    {
        // 每个Order对应创建一个新的Billing对象
        Billing billingItem = new Billing();
        billingItem.adjustment = 10;               
        billingItem.balance_ins = Convert.ToInt32(orderItem.Balance);
        billingItem.balance_total = orderItem.TotalBalance.ToString();
        // 其余字段赋值逻辑
        // 赋值完成后加入返回集合
        items.Add(billingItem);
    }
    // 若方法无实际异步操作,可删除async关键字,返回类型改为Collection<Billing>即可
    // 如果必须保留async声明,可增加await Task.CompletedTask;避免编译警告
    return items;
}

如果你实际需求是把整个Order集合的统计值汇总到单个Billing对象中,不需要循环,直接按如下逻辑实现:

public async Task<Collection<Billing>> MapOrderToBilling(Collection<Order> order)
{
    Collection<Billing> items = new Collection<Billing>();
    Billing billingItem = new Billing();
    billingItem.adjustment = 10;
    // 示例:取所有Order的Balance总和赋值
    billingItem.balance_ins = order.Sum(o => Convert.ToInt32(o.Balance));
    // 示例:取所有Order的TotalBalance总和转字符串
    billingItem.balance_total = order.Sum(o => o.TotalBalance).ToString();
    // 其余字段赋值逻辑
    items.Add(billingItem);
    return items;
}
关键修正点
  • 遍历对象改为入参的order集合,每个Order元素对应生成一个Billing对象
  • 每次循环手动实例化Billing对象,完成字段赋值后调用Add()方法加入返回集合
  • 直接取当前遍历到的Order元素的属性赋值,不要对整个order集合调用Select()做无意义的序列查询

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 04:00:05