在测试范围时,是否有更多的 C# 9 / .NET 5 惯用方式来表达 If/Else?(模式匹配或更新的 C# 功能)

Bud*_*Joe 0 c# idioms readability pattern-matching .net-5

今天只需要为一个非常接近此的项目编写一些代码:

private static string CreateColorFromPercentage(double percentage, bool isPrimaryGroup)
{
    if (isPrimaryGroup)
    {
        if (percentage >= 97.0)
        {
            return "#000000"; // black
        }
        else if (percentage > 80.0)
        {
            return "#FF0000"; // red
        }
        else
        {
            return "#FFA500"; // orange
        }
    }
    else
    {
        if (percentage > 97.5)
        {
            return "#000000"; // black
        }
        else if (percentage > 80.0)
        {
            return "#FFA500"; // orange
        }
        else
        {
            return "#008000"; // green
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在测试范围时,是否有更多的 C# 9 / .NET 5 惯用方式来表达 If/Else?Resharper 已经告诉我缩短/删除一些 else 语句。是否有更像人类可读版本的“网格”?表达相同意图的更好方法,但让它读起来像 6 个简单的条件。谢谢。

Pao*_*sco 5

使用 .NET 5,您应该能够像在此示例中一样使用模式匹配:

static string CreateColorFromPercentage(double percentage, bool isPrimaryGroup) {
    return (percentage, isPrimaryGroup) switch {
        (>= 97.0, true)  => "#000000",
        (> 80.0,  true)  => "#FF0000",
        (_,       true)  => "#FFA500",
        (>= 97.5, false) => "#000000",
        (> 80.0,  false) => "#FFA500",
        (_,       false) => "#008000"
    };
}
Run Code Online (Sandbox Code Playgroud)