使用foreach项目循环初始化列表

本文关键字:初始化 列表 循环 项目 foreach 使用 | 更新日期: 2023-09-27 18:30:03

我正在尝试设置List类型的对象属性的值,并使用foreach将项目添加到列表中进行初始化,例如

var sessionPlanner = new SessionPlannerDTO()
        {
            Age = "",
            NumberOfPlayers = session.numberOfPlayers.Value,
            MedicalInformation = "",
            PlayerNeeds = "",
            SessionDate = session.daySessionDate.Value,
            Location = session.Location.locationName,
            PracticeView = new List<PracticeViewDTO>(foreach(var practice in session.Sessions){
                new PracticeViewDTO(){AbilityLevel = practice.ActivityPlan.abilityLevel.Value,
                ActivityUrl = practice.ActivityPlan.activityUrl,
                EquipmentNeeds = practice.ActivityPlan.equipmentNeeds,
                FacilityNeeds = practice.ActivityPlan.activityNeeds,
                HealthAndSafety = practice.ActivityPlan.healthAndSafetyIssues,
                SessionTitle = practice.ActivityPlan.activityName
                };
            })
        };

PracticeView是我试图通过将其列为一个列表来实现的,而无需执行以下操作:

var practiceViewList = new List<PracticeViewDTO>();
        foreach(var practice in session.Sessions)
        {
            var practiceX = new PracticeViewDTO()
            {
                AbilityLevel = practice.ActivityPlan.abilityLevel.Value,
                ActivityUrl = practice.ActivityPlan.activityUrl
            };
            practiceViewList.Add(practiceX);
        }

使用foreach项目循环初始化列表

在对象或集合初始值设定项中,除了赋值之外,不能使用其他代码。所以你的foreach()不会编译。

使用session.Sessions.Select()将源实体映射到DTO,使用ToList()创建结果列表:

sessionPlanner = new SessionPlannerDTO
{
    Age = "",
    // ...
    PracticeView = session.Sessions.Select(s =>
        new PracticeViewDTO
        {
            AbilityLevel = s.ActivityPlan.abilityLevel.Value,
            // ...
        }).ToList()
};

您可能还想考虑使用AutoMapper,而不是手工编写映射代码。