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修正了这一点,简化了等式。