如何通过一个简短的"if-else"结果
本文关键字:quot 结果 if-else 何通过 一个 | 更新日期: 2023-09-27 18:07:30
假设我在循环中有一个简短的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.
}
但是它太长了,我试图把每个中断条件都放在一行中,因为有几个。
您可以在不使用三元操作符的情况下使用缩短的语法,但是您想要做的是不可能的。如果在if
中有break
语句,也不需要else
。
for (...)
{
if (b == c) { a = b; break; }
a = c;
// More code if b does not equal c
}
以下是有关三元操作符及其用法的一些信息:?: Operator (C#)
对于您给出的示例,您可以将其重新构建为
for (int i = 0; i < count && b != c; ++i)
{
if( b != c )
{
// code
}
}
a = b;
但是,您想要做的特定事情(从三元内断开)是不可能的。
三元运算符(即"简写的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结构合并到单行。