c# - 在 C# 中不可能在开关中使用小数范围吗?

标签 c# decimal switch-statement

我刚刚开始学习 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/

相关文章:

c# - 以下字符串的正则表达式是什么?如果数字翻转,表达式会改变吗?

java - 在java中格式化2位小数

将二进制转换为十六进制再转换为十进制

java - 如何在使用if条件的同时提高代码标准?

swift - Swift 中有 NULL 语句吗?

c# -++什么时候不会产生与+1相同的结果?

c# - TopMost 窗口有时位于非 TopMost 全屏窗口后面

c# - 内存不足异常前的位图最大尺寸

c++ - 十进制到二进制的实现不能在我大学的检查器上完全工作。可能是什么问题或提示

c++ - 代码在 Switch 内部的函数之后不执行