让我重新解释一下我的问题。
请考虑以下代码:
while (true)
{
Console.Write("Please enter something ");
userInput = Console.ReadLine();
if (string.IsNullOrEmpty(userInput))
{
break;
}
collection.Add(userInput);
}
如何更改以避免使用while (true)
?
答案 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);