能否遍历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
相关产品推荐
相关产品推荐

