Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何重构ifs瀑布,使其更干净、更高效?_C#_If Statement_Numbers_Conditional Statements_Refactoring - Fatal编程技术网

C# 如何重构ifs瀑布,使其更干净、更高效?

C# 如何重构ifs瀑布,使其更干净、更高效?,c#,if-statement,numbers,conditional-statements,refactoring,C#,If Statement,Numbers,Conditional Statements,Refactoring,当我写代码时,我正在解决我的缺陷:我从不用任何语言编写干净的程序 那么,有没有建议以“优雅”的方式重新编写这段代码?因为我不喜欢这瀑布般的如果 public float RoundAngle(float angle) { if(angle < 45 && angle >= -45){ return 0 } if(angle < 135 && angle >= 45){ return

当我写代码时,我正在解决我的缺陷:我从不用任何语言编写干净的程序

那么,有没有建议以“优雅”的方式重新编写这段代码?因为我不喜欢这瀑布般的如果

public float RoundAngle(float angle)
{
    if(angle < 45 && angle >= -45){
        return 0
    }

    if(angle < 135 && angle >= 45){
        return 90
    }

    if(angle < 315 && angle >= 225)
    {
        return 270
    }
}
公共浮动圆角(浮动角度)
{
如果(角度<45和角度>=-45){
返回0
}
如果(角度<135和角度>=45){
返回90
}
如果(角度<315和角度>=225)
{
返回270
}
}
您可以将a与以下部分一起使用:

公共浮动圆角(浮动角度)
{
返回角开关
{
=-45 => 0,
=45 => 90,
=225 => 270,
_=>SomeDefaultValue,
};
}
您可以将a与以下部分一起使用:

公共浮动圆角(浮动角度)
{
返回角开关
{
=-45 => 0,
=45 => 90,
=225 => 270,
_=>SomeDefaultValue,
};
}

好吧,一开始你根本不需要ifs:

var normalizedAngle = 90 * (int)((angle + 405) / 90) % 360;
也就是说,ifs可能更容易理解


除非您有一个非常复杂的嵌套if结构,很难阅读和理解,而不是您的案例,否则您的代码实际上没有任何问题。我认为它比单行程序选项更容易理解。

好吧,你根本不需要ifs来开始:

var normalizedAngle = 90 * (int)((angle + 405) / 90) % 360;
也就是说,ifs可能更容易理解



除非您有一个非常复杂的嵌套if结构,很难阅读和理解,而不是您的案例,否则您的代码实际上没有任何问题。我认为它比一行程序选项更容易理解。

建议在codereview.stackexchange上发布此内容,如果您的代码使用此格式,好吗!很抱歉谢谢!:)您是否缺少180度,或者这是要求的一部分?如果180也是一个选项,你实际上可以使用
90*Math.Round(angle/90)
我投票结束这个问题,因为你的问题听起来有点像是代码改进和/或审查,如果是这样的话,那么可能与主题无关。它可能更适合其他SE站点,但请务必阅读相关常见问题解答;和/或在交叉发布前根据需要重新措辞您的问题。祝你好运“因为我不喜欢这个瀑布式的ifs…”-这不是瀑布式的建议在codereview.stackexchange上发布这个如果你的代码是以这种形式工作的,好吧!很抱歉谢谢!:)您是否缺少180度,或者这是要求的一部分?如果180也是一个选项,你实际上可以使用
90*Math.Round(angle/90)
我投票结束这个问题,因为你的问题听起来有点像是代码改进和/或审查,如果是这样的话,那么可能与主题无关。它可能更适合其他SE站点,但请务必阅读相关常见问题解答;和/或在交叉发布前根据需要重新措辞您的问题。祝你好运“因为我不喜欢这瀑布般的假想…”-那不是瀑布!谢谢,开关箱是个好主意!我喜欢C#9的新的
和/when
关键字在通常的
&&
等基础上扩展,尽管有点讽刺的是,一切都变得简洁了好啊谢谢,开关箱是个好主意!我喜欢C#9的新的
和/when
关键字在通常的
&&
等基础上扩展,尽管有点讽刺的是,一切都变得简洁了@OlivierRogier那么你做错了什么…在那里截断为int:
(int)((angle+45)/90)*90
@OlivierRogier啊,我明白了,
angle
在我的代码中是一个
int
,如果你把它声明为
float
,你需要截断它。我的错。@。在这两者之间,现在起作用了!(除了上面和下面的管理外)@OlivierRogier修正了这一点,简化了方程。@OlivierRogier那么你做错了什么…在那里截断为int:
(int)((angle+45)/90)*90
@OlivierRogier啊,我明白了,
angle
在我的代码中是一个
int
,如果将其声明为
float
,则需要截断它。我的错。@。在这两者之间,现在起作用了!(除了上面和下面的管理外)@OlivierRogier修正了这一点,简化了等式。