我最近从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#中做到这一点?
提前非常感谢您!
对于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;
}
假设examScore
是int
,这个有点滥用新“图案类型匹配”设施能够有一些中说case
条款,然后使用when
条款任意条件适用于新引入的变量。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句