我有一些代码写得像这样:
private double function1()
{
double result2 = function2();
if (result2 < 0) { return result2; }
double result3 = function3();
if (result3 < 0) { return result3; }
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我需要重新编写它,使它只有一个return语句.是否有捷径可寻?从使用两次相同的if构造开始,这对我来说是低效的.如何清除这种低效率?
Dan*_*haw 12
单线解决方案,不需要更改功能2/3.不是特别可读但有趣:
private double function1()
{
return new Func<double>[] { function2, function3 }
.Select(c => c()).FirstOrDefault(c => c < 0);
}
Run Code Online (Sandbox Code Playgroud)
就个人而言,我会选择你的原始版本.
保持简单,保持可读性.
// direct conversion of your code
private double function1()
{
double result = 0;
double result2 = function2();
if (result2 < 0)
{
result = result2;
}
else
{
double result3 = function3();
if (result3 < 0)
{
result = result3;
}
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
一个较短的版本,可能更容易在眼睛上:
private double function1()
{
double result = function2();
if (result >= 0) // if (!(result < 0)) to be safe for NaN
{
result = function3();
if (result >= 0)
{
result = 0;
}
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
和
从使用两次相同的if构造开始,这对我来说是低效的.
这没有什么低效率的.如果模式重复(更多),您可以开始考虑额外的方法或某些东西以提高可读性.
| 归档时间: |
|
| 查看次数: |
927 次 |
| 最近记录: |