有点陷入了一段时间的循环

本文关键字:一段时间 循环 | 更新日期: 2023-09-27 18:34:09

我只是看不出原因,而我的代码是这样的

        private int getRandomId(string idpool)
    {
        Random rnd = new Random();
        int id = rnd.Next(1, 9999);
        if (idpool == "vm")
        {
            if (vms != null)
            {
                foreach (VirtualMachine vm in vms)
                {
                    if (vm.id == id)
                    { return 0; }
                }
                return id;
            }
        }
        if (idpool == "job")
        {
            if (vms != null)
            {
                foreach (VirtualMachine vm in vms)
                {
                    foreach (Job job in vm.jobs)
                    {
                        if (job.id == id)
                        { return 0; }
                    }
                }
                return id;
            }
        }
        return 0;
    }

代码 2.

                int id;
            if (jobCreate_monday.Checked)
            {
                id = getRandomId("job");
                while (id == 0)
                { getRandomId("job"); }
                current_vm.jobs.Add(new Job(id, jobCreate_start.Value.Hour, jobCreate_start.Value.Minute, jobCreate_stop.Value.Hour, jobCreate_stop.Value.Minute, "Monday"));
            }
            if (jobCreate_tuesday.Checked)
            {
                id = getRandomId("job");
                while (id == 0)
                { getRandomId("job"); }
                current_vm.jobs.Add(new Job(id, jobCreate_start.Value.Hour, jobCreate_start.Value.Minute, jobCreate_stop.Value.Hour, jobCreate_stop.Value.Minute, "Tuesday"));
            }.......more days.

现在,如果只检查星期一或仅检查星期二,一切正常。一旦选中其中两个或更多,程序就会冻结。也许我没有看到明显的东西?

此致敬意。

有点陷入了一段时间的循环

你永远不会将 id 分配给循环中的随机 id

 id = getRandomId("job");
while (id == 0)
{ getRandomId("job"); }

应该是

 id = getRandomId("job");
while (id == 0)
{ id = getRandomId("job"); }