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

C#中foreach遍历乘客列表时跳过指定类型组合的问题

解决方案

方式一:先过滤需跳过的对象

在查找匹配乘客前,通过Where先排除「空位是成人(TypeId=1)且当前待匹配乘客是儿童(Type=2)」的组合,再执行原匹配逻辑:

foreach (var filePassenger in objFilePassengers)
{
    // TypeId == 1 是成人,TypeId == 2 是儿童
    var passenger = objPassengers
        // 跳过不符合要求的匹配组合
        .Where(p => !(p.TypeId == "1" && filePassenger.Type == "2"))
        // 沿用原有匹配规则
        .FirstOrDefault(p => 
            (p.TypeId == filePassenger.Type && p.TypeId == "1") 
            || (p.TypeId != "1" && filePassenger.Type != "1" && p.Age == filePassenger.Age));

    if (passenger != null)
    {
        passenger.PassengerId = filePassenger.PassengerID;
        passenger.TypeId = filePassenger.Type;
        passenger.FirstName = filePassenger.Name.ToTitleCase();
        passenger.LastName = filePassenger.LastName.ToTitleCase();
        passenger.Age = filePassenger.Age;
    }
}

方式二:针对儿童乘客单独处理

如果需求仅针对儿童乘客的匹配逻辑优化,可直接在处理儿童乘客时,限定只查找儿童空位(TypeId=2),自然跳过成人空位:

foreach (var filePassenger in objFilePassengers)
{
    // TypeId == 1 是成人,TypeId == 2 是儿童
    var passenger = filePassenger.Type == "2" 
        // 儿童乘客仅匹配儿童空位,按年龄匹配
        ? objPassengers.FirstOrDefault(p => p.TypeId == "2" && p.Age == filePassenger.Age)
        // 非儿童乘客沿用原有匹配逻辑
        : objPassengers.FirstOrDefault(p => 
            (p.TypeId == filePassenger.Type && p.TypeId == "1") 
            || (p.TypeId != "1" && filePassenger.Type != "1" && p.Age == filePassenger.Age));

    if (passenger != null)
    {
        passenger.PassengerId = filePassenger.PassengerID;
        passenger.TypeId = filePassenger.Type;
        passenger.FirstName = filePassenger.Name.ToTitleCase();
        passenger.LastName = filePassenger.LastName.ToTitleCase();
        passenger.Age = filePassenger.Age;
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 15:41:46