数组维度超出了支持的范围。.NET API 接口

Array dimensions exceeded supported range. .NET API

提问人:sharls 提问时间:11/16/2023 最后编辑:Brian Tompsett - 汤莱恩sharls 更新时间:11/17/2023 访问量:34

问:

是否可以遍历一个类型?我正在尝试创建一个 using while 循环。TimeOnlyList<TimeOnly>

[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);
        startHour.AddMinutes(15);
    }

    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");
}

当我发布请求时,它看起来像循环是无限的,然后我得到了这样的错误:

数组维度超出了支持的范围。

当我使用 for 循环和

.NET 循环

评论


答:

0赞 Tim Schmelter 11/16/2023 #1

主要问题是 TimeOnly.AddMinutes 返回一个新的(因为您无法修改它)。所以你必须把它赋值给变量:TimeOnlystartHour

startHour = startHour.AddMinutes(15);

下一个问题是,可能永远不会等于 .所以使用:startHourendHour<

while(startHour < endHour)
{
    hours.Add(startHour);
    startHour = startHour.AddMinutes(15);
}

您还应该首先确保你有有效的时间,所以 end 应该在 start 之后出现:

var startHour = TimeOnly.Parse(sheduleCreateDto.StartHour);
var endHour = TimeOnly.Parse(sheduleCreateDto.EndHour);
bool valid = endHour > startHour; // handle invalid now and don't start processing

评论

0赞 sharls 11/16/2023
我添加了两者,同样的事情发生了。我担心也许我传递了错误的数据来创建变量,但是当我手动声明它们时,它仍然不起作用。
0赞 Tim Schmelter 11/16/2023
sharls:你知道如何使用调试器吗?现在是使用它的好时机:)
0赞 sharls 11/16/2023
我正在学习它,但会尝试
0赞 Tim Schmelter 11/16/2023
@sharls:我找到了真正的问题并编辑了我的答案(第一部分)。
0赞 sharls 11/16/2023
是的,它现在可以工作了。我也在调试器中发现它没有递增。谢谢。