为什么这会导致inf.环?

0 c# loops while-loop

代码的这一部分为客户端提供了一个ID,通过检查ID是否已被使用来检查下一个最高ID.由于某种原因,这导致了一个永无止境的循环为什么会这样?

        int IDcounter = 0;
        bool IDfound = false;
        bool IDused = false;
        while (!IDfound)
        {
            Console.WriteLine("Current ID check " + IDcounter);
            Console.WriteLine("Number of clients " + clientList.Count);
            foreach (Client id in clientList)
            {
                if (id.ID == IDcounter)
                {
                    IDused = true;
                    IDcounter++;
                    break;
                }
            }
            if (!IDused)
            {
                client.ID = IDcounter;
                IDfound = true;

            }

        }

        clientList.Add(client);
Run Code Online (Sandbox Code Playgroud)

dle*_*lev 6

您需要else在最终if语句中添加:

        if (!IDused)
        {
            client.ID = IDcounter;
            IDfound = true;

        }
        else
        {
            // Reset the IDUsed status
            IDUsed = false;
        }
Run Code Online (Sandbox Code Playgroud)

考虑当您发现您检查的第一个ID由某个客户端获取时会发生什么.你设置IDUsedtrue,然后break循环.该if (!IDUsed)支票是假的(因为ID 使用),所以你重复.但请注意,你从未IDUsed回头false.事实上,循环中没有任何地方发生,所以你永远循环.