有点卡住了一段时间?

时间:2016-02-11 14:58:53

标签: c# while-loop

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

        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.

现在如果只检查星期一或星期二,一切都很好。 一旦检查了其中两个或更多,程序冻结。 也许我没有看到明显的东西?

最好的问候。

1 个答案:

答案 0 :(得分:4)

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

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

应该是

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