嗨,我有类似的东西: 版本1:
bool noErrors = true;
while(noErrors)
{
noErrors = ValidateControl(txtName);
// other code
}
第2版:
bool noErrors = true;
while(noErrors)
{
if(!ValidateControl(txtName)) break;
// other code
}
我使用此代码验证表单,如果验证返回false,我想在执行“其他代码”之前中断。由于我不知道循环何时检查其状况,我不知道哪个更有意义。我应该使用第一个还是第二个版本,还是第三个版本?
感谢您的时间
答案 0 :(得分:4)
版本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 :(得分:2)
只有在任何可能的迭代开始时才检查条件。因此,在版本1中,即使noErrors
在正文的第一行中设置为false,也会执行“其他代码” ...而在版本2中则不会。 ..但是noErrors
在版本2中看起来有些无用。
可以将其更改为:
while (ValidateControl(txtName))
{
// other code
}
答案 2 :(得分:0)
while
循环在第一次迭代之前评估其条件,并且 in between 每次后续迭代。永远不会在循环体内评估条件。
答案 3 :(得分:0)
它在再次运行之前检查它(第一次,在第一次运行之后,依此类推)。你必须打破或整个代码块才会运行。
答案 4 :(得分:0)
while循环在迭代它之前的代码块之前检查条件。您还可以使用do-while
构造在最后检查条件。你的版本#2将产生你想要的结果。
答案 5 :(得分:0)
while
循环在执行整个代码块之前检查条件。如果要在执行other code
之前中断执行,请使用版本2.
答案 6 :(得分:0)
循环条件仅在每个循环开始时进行评估,因此在第一个版本中,即使ValidateControl
返回false,“其他代码”仍将被执行。
如果ValidateControl
返回false,那么第二个版本的效果会更好,并且不会运行“其他代码”,但是如果验证它也不会将noErrors
设置为false失败。如果这不重要,并且noErrors
只是循环条件,那么您也可以将while循环更改为while(true)
,如果 稍后在代码中使用,则你需要稍微改变版本2:
bool noErrors = true;
while(noErrors)
{
if(!ValidateControl(txtName))
{
noErrors = false;
break;
}
// other code
}
答案 7 :(得分:0)
如果这是在一个验证例程中,我甚至不会使用WHILE()构造...在过去,我通常会测试每个特定的验证例程,这样做就是......没有涉及到的循环,例如
Function bool IsAllDataValid()
{
if ( ! (ValidateControl(txtName) )
return false;
if ( ! (ValidateControl(OtherField ))
return false;
etc...
return true;
}
然后你不必担心混合包含在哪里或绕过某些代码块......你可能只是......
if IsAllDataValid()
{
Do Your Other Code
}