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

C#中嵌套foreach循环取值实现遇到问题求助

问题分析与解决方案

你的问题核心在于C#的对象初始化器内部不能直接嵌入foreach循环——这种语法只允许直接给属性赋值,没法在里面写循环这类执行语句。另外原代码还漏掉了返回结果列表的语句,这也会导致编译错误。

修正后的基础版代码

先单独处理委托人生成对应的集合,再把集合赋值给Opportunity的DelegateList属性:

private List<Opportunity> CreateOpportunities(Basket basket) {
    var opps = new List<Opportunity>();
    foreach (var orderLine in basket.OrderLines) {
        // 先遍历orderLine里的委托信息,转换成目标实体类列表
        var delegateItems = new List<Delegate>(); // 这里假设Delegate是你的实体类
        foreach (var delegateInfo in orderLine.DelegatesList) {
            delegateItems.Add(new Delegate {
                FirstName = delegateInfo.FirstName,
                LastName = delegateInfo.LastName,
                Email = delegateInfo.Email
                // 补充其他需要映射的属性
            });
        }

        // 初始化Opportunity并添加到结果列表
        opps.Add(new Opportunity {
            DelegateList = delegateItems
            // 补充Opportunity的其他必填属性
        });
    }
    // 不要忘记返回构建好的列表!
    return opps;
}

简化版(用LINQ)

如果你的项目允许使用LINQ,可以把代码简化得更简洁:

private List<Opportunity> CreateOpportunities(Basket basket) {
    return basket.OrderLines.Select(orderLine => new Opportunity {
        DelegateList = orderLine.DelegatesList.Select(delegateInfo => new Delegate {
            FirstName = delegateInfo.FirstName,
            LastName = delegateInfo.LastName,
            Email = delegateInfo.Email
        }).ToList()
        // 补充Opportunity的其他属性
    }).ToList();
}

特殊情况:如果DelegateList是自定义容器类

如果DelegateList的类型不是List<Delegate>,而是一个自定义的容器类(比如内部包含集合属性),比如你的Delegates类定义是这样的:

public class Delegates {
    public List<Delegate> Items { get; set; }
}

那对应的代码要调整为:

private List<Opportunity> CreateOpportunities(Basket basket) {
    var opps = new List<Opportunity>();
    foreach (var orderLine in basket.OrderLines) {
        var delegateItems = orderLine.DelegatesList.Select(d => new Delegate {
            FirstName = d.FirstName,
            LastName = d.LastName,
            Email = d.Email
        }).ToList();

        opps.Add(new Opportunity {
            DelegateList = new Delegates {
                Items = delegateItems
            }
        });
    }
    return opps;
}

关键注意点

  • 对象初始化器(new X { ... })仅用于属性赋值,不能包含循环、条件判断这类执行逻辑;
  • 务必确保返回最终构建好的opps列表,原代码缺少return语句;
  • 要保证DelegateList的类型和你赋值的集合类型匹配,避免类型转换错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:11:02