假设在这种情况下,我在循环中有一个简写的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.
}
但是时间太长,由于其中有多个中断条件,因此我试图将所有中断条件放在一行中。
以下是有关三元运算符的一些信息,它的用法是:?: Operator (C#)
您想做的事是不可能的……这不是它的工作方式。
您可以在不利用三元运算符的情况下使用缩短的语法,但是您尝试执行的操作是不可能的。如果?: Operator (C#)
中有else
语句,则也不需要break
。
if
对于您所给出的示例,您可以对其进行重组,以便如此
for (...)
{
if (b == c) { a = b; break; }
a = c;
// More code if b does not equal c
}
但是,您要尝试执行的特定操作(在三元内部中断)是不可能的。
三元运算符(即“简写if-else”)仅用于基于布尔值评估两个语句之一。它不是像for (int i = 0; i < count && b != c; ++i)
{
if( b != c )
{
// code
}
}
a = b;
那样的流控制结构;它实际上返回执行语句的结果。您不能使用它来执行类似的代码。
如果您要得到一条长的else-if-else-if链,请考虑进行一些重构。可以将其替换为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
这将要变得简短而优雅,同时仍将那些讨厌的if-else构造合并为一行。