如何在这段代码中避免“while(true)”?

时间:2017-04-15 16:39:50

标签: c#

让我重新解释一下我的问题。

请考虑以下代码:

while (true)
{
    Console.Write("Please enter something ");
    userInput = Console.ReadLine();
    if (string.IsNullOrEmpty(userInput))
    {
        break;
    }
    collection.Add(userInput);
}

如何更改以避免使用while (true)

4 个答案:

答案 0 :(得分:2)

你现在while (true)的原因是你的循环体的初始部分不适合循环条件。因此,您可以通过将其重构为函数来避免while (true)

bool TryGetUserInput(out string userInput) {
    Console.Write("Please enter something ");
    userInput = Console.ReadLine();
    return !string.IsNullOrEmpty(userInput);
}

...

string userInput;
while (TryGetUserInput(out userInput))
    collection.Add(userInput);

答案 1 :(得分:1)

你可以试试这个

do
{
    Console.Write("Please enter something ");
    userInput = Console.ReadLine();
    if (!string.IsNullOrEmpty(userInput))
    {
        collection.Add(userInput);
    }
}while(!string.IsNullOrEmpty(userInput));

答案 2 :(得分:0)

我宁愿看到这个结构:

\d+(,\d+)? [KMG]?B

答案 3 :(得分:0)

已经提到代码嗅觉是主观的,这是正确的,但在这种情况下,有一个简单的论据反对使用while(true)

您错过了在代码中表达自己的机会。考虑:

while(true)

这告诉您有关代码的信息?除了可能这段代码无限期地运行之外我们什么都不知道。

现在考虑:

while(inputIsNotEmpty)

我们立即知道进程块或语句将一直运行,直到输入为空。这将节省代码的读者(主要是你自己)一点时间,而不是必须寻找退出条件。

这就是我在这种特殊情况下避免使用while(true)的方法。

do{
   Console.Write("Please enter something ");
   input = Console.ReadLine(); 
   if (inputIsNotEmpty(input)) collection.Add(input);
  } while (inputIsNotEmpty(input);

...

bool inputIsNotEmpty(string input) => !String.IsNullOrEmpty(input);