在测试范围时是否有更多 C# 9 / .NET 5 惯用的表达方式 If/Else? (模式匹配或更新的 C# 功能)
Is there a more C# 9 / .NET 5 Idiomatic Way to Express If/Else when Testing Ranges? (Pattern Matching or newer C# features)
今天刚刚不得不为一个非常接近于此的项目编写一些代码:
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
}
}
}
测试范围时是否有更多 C# 9 / .NET 5 惯用的表达方式 If/Else?
Resharper 已经告诉我缩短/删除一些 else 语句。
是否有更像人类可读版本的“网格”?表达相同意图的更好方法,但读起来像 6 个简单的条件。谢谢
您可以使用嵌套 switch expressions:
private static string CreateColorFromPercentage(double percentage, bool isPrimaryGroup)
{
return isPrimaryGroup switch
{
true => percentage switch
{
>= 97.0 => "#000000", // black
> 80 => "#FF0000", // red
_ => "#FFA500" // orange
},
false => percentage switch
{
> 97.5 => "#000000", // black
> 80.0 => "#FFA500", // orange
_ => "#008000" // green
}
};
}
不会说这更“惯用”,但它可以更具可读性。
模式匹配和条件运算符确实可以使那一页长代码更具可读性:
private static string CreateColorFromPercentage(double percentage, bool isPrimaryGroup) => isPrimaryGroup
? percentage switch { >= 97.0 => "#000000", > 80.0 => "#FF0000", _ => "##FFA500" }
: percentage switch { >= 97.5 => "#000000", > 80.0 => "#FFA500", _ => "##008000" };
在 .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"
};
}
今天刚刚不得不为一个非常接近于此的项目编写一些代码:
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
}
}
}
测试范围时是否有更多 C# 9 / .NET 5 惯用的表达方式 If/Else? Resharper 已经告诉我缩短/删除一些 else 语句。 是否有更像人类可读版本的“网格”?表达相同意图的更好方法,但读起来像 6 个简单的条件。谢谢
您可以使用嵌套 switch expressions:
private static string CreateColorFromPercentage(double percentage, bool isPrimaryGroup)
{
return isPrimaryGroup switch
{
true => percentage switch
{
>= 97.0 => "#000000", // black
> 80 => "#FF0000", // red
_ => "#FFA500" // orange
},
false => percentage switch
{
> 97.5 => "#000000", // black
> 80.0 => "#FFA500", // orange
_ => "#008000" // green
}
};
}
不会说这更“惯用”,但它可以更具可读性。
模式匹配和条件运算符确实可以使那一页长代码更具可读性:
private static string CreateColorFromPercentage(double percentage, bool isPrimaryGroup) => isPrimaryGroup
? percentage switch { >= 97.0 => "#000000", > 80.0 => "#FF0000", _ => "##FFA500" }
: percentage switch { >= 97.5 => "#000000", > 80.0 => "#FFA500", _ => "##008000" };
在 .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"
};
}