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

能否遍历TimeOnly类型?循环生成List<TimeOnly>触发无限循环报错

解决TimeOnly遍历导致的无限循环问题

你遇到的无限循环问题根源在于TimeOnly是不可变类型:调用startHour.AddMinutes(15)时,并不会修改startHour本身,而是返回一个全新的TimeOnly实例。你的代码里没有把这个新实例赋值回startHour,导致循环条件里的startHour永远和初始值一致,永远不等于endHour,最终List不断扩容直到超出.NET的数组范围限制,抛出「Array dimensions exceeded supported range」错误。

修复代码

只需要把AddMinutes的结果重新赋值给startHour即可:

[HttpPost]
public async Task<ActionResult<Shedule>> CreateNewShedule(SheduleCreateDto sheduleCreateDto)
{
    var hours = new List<TimeOnly>();
    var startHour = TimeOnly.Parse(sheduleCreateDto.StartHour);
    var endHour = TimeOnly.Parse(sheduleCreateDto.EndHour);

    while (!startHour.Equals(endHour))
    {
        hours.Add(startHour);
        // 关键修复:将新的TimeOnly实例赋值回startHour
        startHour = startHour.AddMinutes(15);
    }

    // 可选:如果需要包含endHour本身,在这里添加
    // hours.Add(endHour);

    var shedule = new Shedule
    {
        WeekDay = sheduleCreateDto.WeekDay,
        VisitTime = sheduleCreateDto.VisitTime,
        Hours = hours
    };

    _context.Shedules.Add(shedule);
    if (await _context.SaveChangesAsync() > 0) return Ok(shedule);

    return BadRequest("Failed to add shedule");
}

额外提示

如果你的业务逻辑需要把endHour也加入到列表中,可以在循环结束后手动添加,或者修改循环条件为startHour <= endHour(注意要避免初始时startHour等于endHour导致重复添加的情况)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 22:37:04