我刚刚开始学习 C#,但我已经被一些非常基础的东西困住了。
对于我的第一个“应用程序”,我认为我会选择一些简单的东西,所以我决定使用 BMI 计算器。
BMI 计算为小数类型,我现在正尝试在 switch 语句中使用它,但显然小数不能用于 switch 中?
对此的 C# 解决方案是什么:
decimal bmi = calculate_bmi(h, w);
switch (bmi) {
case < 18.5:
bmi_description = "underweight.";
break;
case > 25:
bmi_description = "overweight";
case > 30:
bmi_description = "very overweight";
case > 40:
bmi_description = "extreme overweight";
break;
}
最佳答案
switch
语句只支持integral types (枚举未列出,但可以与 switch
语句一起使用,因为它们由整数类型支持)(正如 Changeling 所指出的那样,也支持字符串 - 请参阅注释以供引用)和与常量的相等比较值。因此,您必须使用一些 if
语句。
if (bmi < 18.5M)
{
bmi_description = "underweight.";
}
else if (bmi <= 25)
{
// You missed the 'normal' case in your example.
}
else if (bmi <= 30)
{
bmi_description = "overweight";
}
else if (bmi <= 40)
{
bmi_description = "very overweight";
}
else
{
bmi_description = "extreme overweight";
}
顺便说一下,您的 switch 语句有点奇怪,因为您要从小于切换到大于,并且使用不间断的直通。我认为应该只使用一种类型的比较以使代码更容易理解或重新排序检查并且不要使用 fall-through。
if (bmi < 18.5M)
{
bmi_description = "underweight.";
}
else if (bmi > 40)
{
bmi_description = "extreme overweight";
}
else if (bmi > 30)
{
bmi_description = "very overweight";
}
else if (bmi > 25)
{
bmi_description = "overweight";
}
else
{
// You missed the 'normal' case in your example.
}
关于c# - 在 C# 中不可能在开关中使用小数范围吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2937154/