【发布时间】:2014-04-13 20:04:12
【问题描述】:
这是我当前的代码:
int max;
if(runOnce)
max = 1;
else
max = 2;
for(i=0;i<max;i++)
//do stuff
它看起来很乱,我相信有更好的方法来做到这一点。
谢谢。
【问题讨论】:
-
为什么看起来很乱?对我来说看起来不错。您可以将其减少
int max = runOnce? 1 : 2;
这是我当前的代码:
int max;
if(runOnce)
max = 1;
else
max = 2;
for(i=0;i<max;i++)
//do stuff
它看起来很乱,我相信有更好的方法来做到这一点。
谢谢。
【问题讨论】:
int max = runOnce? 1 : 2;
如果您希望摆脱for-loop,一个简单的解决方案是将您的“做事”逻辑包装在一个方法中:
private void DoStuff()
{
// do stuff
}
然后当你想调用它时,只需执行以下操作:
DoStuff();
if (!runOnce)
{
DoStuff();
}
或者,如果您需要访问多个局部变量,您可能需要考虑使用lambda expression 而不是方法:
Action doStuff = () =>
{
// do stuff
};
doStuff();
if (!runOnce)
{
doStuff();
}
【讨论】:
for 循环,如果你只运行一次它就没有意义。就我个人而言,我也会将 !runOnce 更改为 runTwice 以避免负面情况,但这就是我自己
这个怎么样:
for (int i = 0; i < (runOnce? 1 : 2); i++)
【讨论】:
试试这个:
int max = (runOnce==true) ? 1 : 2;
for(i=0; i<max; i++)
? 运算符称为条件运算符,一般形式如下:
condition ? first_expression : second_expression;
如果condition 为真,则使用first_expression。否则使用second_expression。
更多文档请查看here。
最后但同样重要的是,正如 Sriram 在 cmets 中指出的那样,我们也可以使用
int max = runOnce ? 1 : 2;
【讨论】:
int max = runOnce? 1 : 2 绰绰有余:)
有时需要知道的一点是,布尔值true 在转换为整数时始终具有1 的值。所以这应该有效:
for( int i = (int)runOnce; i < 2; ++i )
如果runOnce 为假,则计算 (0, 1),或者如果为真,则跳过 0,仅在 i = 1 时运行。
【讨论】: