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

How to refactor this waterfall of ifs to be more clean and efficient?

我在编写代码时正在研究我的缺陷:我从不使用任何语言编写干净的程序。

那么,有什么建议可以“优雅”地重写这段代码吗?因为我不喜欢这种如果的瀑布...

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
    }
}

您可以使用 switch expression with some C# 9 patterns:

public float RoundAngle(float angle)
{
    return angle switch
    {
        <45 and >=-45 => 0,
        <135 and >=45 => 90,
        <315 and >=225 => 270,
        _ => SomeDefaultValue,
    };
}

好吧,你根本不需要 ifs:

var normalizedAngle = 90 * (int)((angle + 405) / 90) % 360;

也就是说,ifs 可能更容易理解

除非你有一个非常复杂的嵌套 if 结构,难以阅读和遵循,根本不是你的情况,否则你的代码实际上没有任何问题。恕我直言,我认为它比单线选项更容易理解。