[英]How to break a loop by a shorthand “if-else” result?
假设我在循环中有一个速记 if-else 语句,如本例所示:
for(...)
{
a = b == c ? b : c;
// More unnecessary code if the result was true.
}
我想通过条件的结果打破循环:
for(...)
{
a = b == c ? b break : c;
// Now the unnecessary code is not executed.
}
我意识到我可以像这个例子一样以完整的方式输入它:
for(...)
{
if( b == c )
{
a = b;
break;
}
else
{
a = c;
}
// Now the unnecessary code is not executed.
}
但是它太长了,我试图在一行中包含所有破坏条件,因为有几个。
您可以在不使用三元运算符的情况下使用缩短的语法,但您尝试做的事情是不可能的。 你也不需要一个else
,如果你有一个break
的说法if
。
for (...)
{
if (b == c) { a = b; break; }
a = c;
// More code if b does not equal c
}
对于您给出的示例,您可以对其进行重组
for (int i = 0; i < count && b != c; ++i)
{
if( b != c )
{
// code
}
}
a = b;
但是,您尝试做的特定事情(从三元中中断)是不可能的。
以下是有关三元运算符及其用途的一些信息: ?: Operator (C#)
你想做的是不可能的......这不是它的工作原理。
三元运算符(即“简写 if-else”)仅用于根据布尔值评估两个语句之一。 它不像if
那样是一个流控制结构; 它实际上返回它执行的语句的结果。 你不能用它来执行这样的代码。
如果您最终得到一个很长的 else-if-else-if 链,请考虑稍微重构一下。 可以用switch
块替换它。
为测试创建一个函数。 如果它被重用,它至少比你的例子短。
int a;
if(TryEqual(b, c, out a))
break;
bool TryEqual(int x, int y, out res)
{
if(x == y)
{
res = x;
return true;
}
res = y;
return false;
}
我想出了这个解决方案。
for (...)
{
if ( (b == c ? (a=b) == a : (a=c) != a) ) break;
}
当然,精明的读者会注意到,您总是可以分配a=c
,然后当且仅当b==c
中断,因为这将是等效的。
for (...)
{
a = c; if (b==c) break;
}
这将尽可能简短而优雅,同时仍将那些讨厌的 if-else 构造合并为一行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.