如何在每个执行行之后强制循环检查其条件,而不是仅在整个块完成时?
我有一段时间(!语句){}循环,但语句可以通过几种不同的方法进行更改,并且应该强制循环在当前行之后立即中断在循环中已完成执行;而不是整个循环块完成一个循环。
有没有办法做到这一点?
答案 0 :(得分:12)
根据您的操作,您可以考虑将每个语句作为委托,创建一个委托数组,并在整个数组中运行for循环。这样循环只有两行:一行检查条件,以及何时在当前数组位置执行委托。
答案 1 :(得分:3)
是的,但你不会喜欢它......只需在每条指令后放一个if (!condition) break;
;)
答案 2 :(得分:3)
这不是语言的工作方式。您必须定期检查:
while (processing)
{
actionA();
if (!processing)
break;
actionB();
if (!processing)
break;
actionC();
}
答案 3 :(得分:3)
让这些方法抛出一个自定义异常并在循环中为特定异常设置try-catch。
while (!condition) {
try {
//method calls
} catch (CustomException ce) {
break;
}
}
答案 4 :(得分:2)
您可以创建自定义迭代器(使用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;
}
}
答案 5 :(得分:1)
我认为在每行可以改变值之后你需要一个if语句,如果满足条件则需要中断。