C#开关与VB案例声明

用户名

我最近从VB切换到C#。我注意到的一件事是,在C#中,使用比较作为案例的一部分时遇到了问题。我不确定如何用语言解释它,所以这里是我尝试做的一个例子。

在VB中,我的代码看起来像这样,并且运行良好。

    Select Case ExamScore
        Case Is >= 90
            Grade = "A"
        Case Is >= 80
            Grade = "B"
        Case Is >= 70
            Grade = "C"
        Case Is >= 60
            Grade = "D"
        Case Else
            Grade = "F"
    End Select

另一方面,在C#中,Visual Studio告诉我“> =”是无效的表达式。

    switch (examScore)
    {
        case >= 90: grade = "A"; break;
        case >= 80: grade = "B"; break;
        case >= 70: grade = "C"; break;
        case >= 60; grade = "D"; break;
        default: grade = "F"; break;
    }

我在这里做错了吗,还是根本无法在C#中做到这一点?

提前非常感谢您!

Damien_The_Unbeliever

对于7之前的C#版本,此答案的顶部为true。请参见以下行以获取版本7的更新。

这是不可能的。C#开关只能打开完全相等:

每个案例标签都指定一个常量值。控制权转移到switch部分,其case标签包含一个与switch表达式的值匹配的常数,

您可以将其替换为一堆if/else语句,或者,如果愿意,可以制作看起来很紧凑的东西,但是有些可能会皱眉-条件运算符的嵌套:

grade = examScore >= 90 ? "A" :
        examScore >= 80 ? "B" :
        examScore >= 70 ? "C" :
        examScore >= 60 ? "D" :
        "F";

使用C#7switch进行了显着增强case尽管现在仍不如VB版本“干净”,但现在可以在s内应用更多条件例如,您可以执行以下操作:

switch (examScore)
{
    case int es when es >= 90: grade = "A"; break;
    case int es when es >= 80: grade = "B"; break;
    case int es when es >= 70: grade = "C"; break;
    case int es when es >= 60; grade = "D"; break;
    default: grade = "F"; break;
}

假设examScoreint,这个有点滥用新“图案类型匹配”设施能够有一些中说case条款,然后使用when条款任意条件适用于新引入的变量。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章