C# C中ForEach循环的问题

C# C中ForEach循环的问题,c#,loops,C#,Loops,我试图包含第二个foreach循环,以从对象内的列表中提取值,但在尝试这样做时遇到了问题 这是密码 private List<Opportunity> CreateOpportunities(Basket basket) { var opps = new List<Opportunity>(); foreach (var orderLine in basket.OrderLines) { o

我试图包含第二个foreach循环,以从对象内的列表中提取值,但在尝试这样做时遇到了问题

这是密码

private List<Opportunity> CreateOpportunities(Basket basket)
    {
        var opps = new List<Opportunity>();

        foreach (var orderLine in basket.OrderLines)
        {
            opps.Add(new Opportunity()
            **{**
                DelegateList = new Delegates
                {
                    foreach (var delegates in orderLine.DelegatesList)
                    {
                        FirstName = delegates.FirstName,
                        LastName = delegates.LastName,
                        Email = delegates.Email
                    }
                },

                CourseId = new CourseBooking
                {
                    Id = orderLine.CourseId
                },
                Quantity = orderLine.Quantity,
                EventId = new EventBooking
                {
                    Id = orderLine.EventId
                },
                EventItemDecimalPrice = orderLine.Price,

                TaxType = new TaxType
                {
                    Id = 1,
                    Name = "UK VAT",
                    Rate = orderLine.VatRate
                },
                RegionCode = orderLine.RegionId
            });
        }

        return opps;
    }
编辑:Opportunity DelegateList类

public class Opportunity
{
    [JsonProperty("event")]
    public EventBooking EventId { get; set; }
    [JsonProperty("course")]
    public CourseBooking CourseId { get; set; }
    public int Quantity { get; set; }
    /// <summary>
    /// This is the price per person, NOT the total of the opportunity
    /// </summary>
    [JsonProperty("price")]
    public decimal EventItemDecimalPrice { get; set; }

    [JsonProperty("tax_type")]
    public TaxType TaxType { get; set; }

    [JsonIgnore]
    public string RegionCode { get; set; }

    [JsonProperty("delegates")]
    public List<Delegates> DelegateList { get; set; }

}

我认为问题是在对象初始化中为每个循环都设置了一个for循环。在初始化委派列表之前,应该为每个循环移动内部。差不多-

foreach (var orderLine in basket.OrderLines)
{
    var firstName;
    var lastName;
    var email;

    List<DelegateList> delegates = new List<DelegateList>();

    foreach (var delegates in orderLine.DelegatesList)
    {
        delegates.Add(new Delegates{firstName = delegates.FirstName,lastName = delegates.LastName,email = delegates.Email});
    }

    opps.Add(new Opportunity()
    {//...
使用Linq的选择:

opps.Add(new Opportunity()
{
    DelegateList = orderLine.DelegatesList
       .Select(orderLineDelegate => new Delegates
       {            
            FirstName = orderLineDelegate.FirstName,
            LastName = orderLineDelegate.LastName,
            Email = orderLineDelegate.Email
       })
       .ToList(),

    CourseId = ...

你应该去掉分号;从每个循环的内部,您应该创建一个委托构造函数,以orderLine作为参数。内部foreach位于对象初始值设定项内。那没有道理请你给我们看看代理类型好吗?您不能在这样的对象初始值设定项中编写foreach循环。此外,我不确定您为什么要初始化两次委托,并且其中一个委托中的每个委托都有一个for,而另一个为空。谢谢。第一个变量现在表示var在当前上下文中不存在。我还有一个问题,orderLine.DelegatesList中的var委托没有将委托链接到列表DelegatesList,只是将其定义为局部变量,因此delegates.FirstName是错误的,而object也不包含定义,foreach是否会覆盖自身并仅将列表中的最后一个条目填充为FirstName?代码的摘要是,有1个订单行,但可能有多个代表参与1个订单行,因此商机应包括每个订单行,其中包含的代表链接到他们自己的订单行orderline@PaulAlmond对不起,每个的内部应该在每个的外部之后。我已修改代码,请检查。是的,它将覆盖该值,因为内部循环未存储数据。它只是复制/实例化字段变量。如果你知道所有的价值观,您可以使用列表集合来存储它们。好的,这修复了第一个错误-隐式类型变量现在出现错误,必须初始化,而且我仍然存在调用DelegatesList对象的问题。感谢您的替代建议-直到newDelegates出现错误,并且名称为newDelegates的newDelegates在中不存在当前上下文计算出newdelegate应该是缺少空格的新委托。但是,委托指向的是OrderDelegate委托,而不是OrderLine DelegateList,因此它在DelegateList的上下文中找不到FirstName这是因为我没有将OrderDelegate作为公共类打开。
DelegateList = delegates;
opps.Add(new Opportunity()
{
    DelegateList = orderLine.DelegatesList
       .Select(orderLineDelegate => new Delegates
       {            
            FirstName = orderLineDelegate.FirstName,
            LastName = orderLineDelegate.LastName,
            Email = orderLineDelegate.Email
       })
       .ToList(),

    CourseId = ...