如何强制循环在每行执行后检查其条件,而不是仅在整个块完成时检查?
我有一个while(!语句) { }循环,但语句可以通过几种不同的方法进行更改,并且应该在当前循环行完成执行后立即强制循环中断;而不是在整个循环块完成一个周期时。
有没有办法做到这一点?
如何强制循环在每行执行后检查其条件,而不是仅在整个块完成时检查?
我有一个while(!语句) { }循环,但语句可以通过几种不同的方法进行更改,并且应该在当前循环行完成执行后立即强制循环中断;而不是在整个循环块完成一个周期时。
有没有办法做到这一点?
根据你正在做的事情,你可以考虑让每个语句成为一个委托对象(delegate),创建一个委托对象数组,并在数组上运行for循环。 这样,循环只需要两行代码:一行用于检查条件,当执行当前数组位置上的委托对象时,执行另一行。
这不是语言的工作方式。你需要定期检查:
while (processing)
{
actionA();
if (!processing)
break;
actionB();
if (!processing)
break;
actionC();
}
那么可以将这些方法抛出自定义异常,并在循环中针对特定的异常使用try-catch语句。
while (!condition) {
try {
//method calls
} catch (CustomException ce) {
break;
}
}
是的,但你可能不会喜欢...只需在每个指令后添加if (!condition) break;
;)
您可以创建一个自定义迭代器(使用yield语句)。该迭代器将返回每个要执行的行(使用匿名方法)。然后,您可以逐个迭代每个行并检查循环内的条件。以下是示例:
public delegate void DelegateType();
public static IEnumerable< DelegateType > GetStatements()
{
// ---- replace with your code below ----
yield return delegate() { Console.WriteLine("statement 1"); };
yield return delegate() { Console.WriteLine("statement 2"); };
yield return delegate() { Console.WriteLine("statement 3"); };
yield return delegate()
{
// You can return multiples statements in one block.
Console.WriteLine("statement 4");
Console.WriteLine("statement 5");
};
}
这是如何迭代您的语句并在每个语句后检查条件的方法。
IEnumerable<DelegateType> statementList = GetStatements();
foreach (DelegateType statement in statementList)
{
statement(); // Here is where your statement executes.
if (!ConditionContinue()) // Check your condition here.
{
break;
}
}