while循环何时检查其状态
本文关键字:状态 检查 何时 循环 while | 更新日期: 2023-09-27 17:58:25
嗨,我有这样的东西:版本1:
bool noErrors = true;
while(noErrors)
{
noErrors = ValidateControl(txtName);
// other code
}
版本2:
bool noErrors = true;
while(noErrors)
{
if(!ValidateControl(txtName)) break;
// other code
}
我使用此代码来验证表单,如果验证返回false,我希望在执行"其他代码"之前中断。由于我不知道循环何时检查其条件,所以我不知道哪个更有意义。我应该使用第一个版本还是第二个版本,或者第三个版本?
感谢您抽出时间
版本2将在运行//other code
之前中断。版本1直到下一次迭代开始才会进行检查。
bool noErrors = true;
while(noErrors)
{
noErrors = ValidateControl(txtName);
// other code
}
每次迭代前进行检查。
bool noErrors = true;
do
{
noErrors = ValidateControl(txtName);
// other code
} while(noErrors);
每次迭代后进行检查。
在迭代过程中都不进行检查。正如其他回答者所说,下面的代码简化了示例,但让我提出了一个问题,txtName
的有效性是否可能在循环执行过程中发生变化?其他一些限制条件会更有用吗?
while (ValidateControl(txtName))
{
// other code
}
如果txtName
的有效性不会改变,则考虑
if (ValidateControl(txtName))
{
while(/*Some other condition*/)
{
// other code
}
}
只有在任何可能的迭代开始时才会检查条件。因此,在版本1中,即使在正文的第一行中将noErrors
设置为false,也会执行"其他代码"。。。而在版本2中,它不会。。。但是CCD_ 5在版本2中看起来有些无用。
你能把它改成:吗
while (ValidateControl(txtName))
{
// other code
}
while
循环在第一次迭代之前评估其条件,并在每次后续迭代之间评估。从不在循环体内部评估条件。
它在再次运行之前(第一次、第一次运行之后等等)对其进行检查。你必须中断,否则整个代码块就会运行。
while循环在遍历其前面的代码块之前检查条件。您也可以使用do-while
构造使其检查末尾的条件。你的版本#2将产生你想要的结果。
while
循环在执行整个代码块之前检查条件。如果要在执行other code
之前中断执行,请使用版本2。
循环条件仅在每个循环开始时计算,因此在第一个版本中,即使ValidateControl
返回false,"其他代码"仍将执行。
您的第二个版本运行得更好,如果ValidateControl
返回false,将不会运行"其他代码",但如果验证失败,它也不会将noErrors
设置为false。如果这并不重要,并且noErrors
只是循环条件,那么您还可以将while循环更改为while(true)
,如果代码稍后使用,那么您需要稍微更改版本2:
bool noErrors = true;
while(noErrors)
{
if(!ValidateControl(txtName))
{
noErrors = false;
break;
}
// other code
}
如果这是在验证例程中,我甚至不会使用WHILE()构造。。。在过去,我通常会测试每一个特定的验证例程,这些例程就是这样做的。。。不涉及诸如之类的循环
Function bool IsAllDataValid()
{
if ( ! (ValidateControl(txtName) )
return false;
if ( ! (ValidateControl(OtherField ))
return false;
etc...
return true;
}
然后你就不必担心包含或绕过某些代码块的混合在哪里了。。。你本可以。。。
if IsAllDataValid()
{
Do Your Other Code
}