分配内部还是外部循环?

时间:2018-04-21 08:22:16

标签: c#

如果P为true,我想分配一个值然后用P运行while循环。

这是一个显而易见的解决方案:

int thevalue = 0;

// Calculate P

if(P)
{
     theValue = 2;
}
while(P)
{
    // Do something without modifying theValue and calculate P
}

但这对我来说更好看:

int theValue = 0;

// Calculate P

while(P)
{
    theValue = 2;
    // Do something without modifying theValue and calculate P
}

每次循环运行时它会分配吗?编译器可以对此进行优化。

这是一个好习惯吗?

编辑:

循环后使用该值。

如果P检查时P值不应该改变。

更明确的问题: 如果while循环运行像“十亿次”那么循环中的赋值是无效的还是一个不必要的CPU周期?

1 个答案:

答案 0 :(得分:2)

在功能上它是等价的,但我会解决这个良好做法' ...

P显然不是不变的,否则你的while循环永远不会终止!如果它不是不变的,那么您在' if'中使用的起始/初始条件就是'语句必须与循环的每次迭代的评估不同。

我认为你真正尝试与' if'声明是"如果while循环将被评估至少一次"则设置值。作为一种风格问题,我会编写代码以使这个意图更清晰。如果你可以使用一个集合,那么我会建议一个模式,如....

var theValue = collection.Any() ? 2 : someSensibleDefault;
foreach (var thing in collection)
{
}

如果确实是测试条件......

var theValue = (initialP)  ? 2 : someSensibleDefault;
while (P)
{
}

作为最后的评论,我真的不会考虑在这里担心优化 - 目标应该是表达你想要做的事情。