C# “如何用速记打破循环”;如有其他",;结果如何?
假设循环中有一个简化的if-else语句,如本例所示:C# “如何用速记打破循环”;如有其他",;结果如何?,c#,loops,if-statement,break,shorthand,C#,Loops,If Statement,Break,Shorthand,假设循环中有一个简化的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(...)
{
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
}
对于您给出的示例,您可以将其重新构造为
for (int i = 0; i < count && b != c; ++i)
{
if( b != c )
{
// code
}
}
a = b;
for(int i=0;i
但是,您尝试执行的特定操作(从三元运算符中断开)是不可能的。以下是有关三元运算符及其用法的一些信息: 你想做的是不可能的。。。这不是它的工作原理。三元运算符(即“else的简写形式”)仅用于基于布尔值计算两条语句中的一条。它不像
if
那样是一个流控制结构;它实际上返回它执行的语句的结果。你不能用它来执行那样的代码
<>如果你结束了一个漫长的,如果是链,考虑重构。可以将其更换为
开关
块。为测试创建一个功能。如果它被重用,它至少比您的示例要短
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结构合并成一行。这是不可能的。+这是一种非常丑陋的方式。你确定你了解编程和面向对象编程的基础知识吗?这与干净的编码风格无关;如果(b==c)中断代码>不幸的是,在三元运算符中,除了它的用途之外,您不能做更多的事情。。。剩下的是另一个“完整”版本。。。我真的不喜欢这种格式化条件块的方式。@anaximander我同意,但似乎把它放在一行对操作很重要。