如何在 case 语句中使用范围 C#

How do I use ranges in case statement c#

我想知道我做错了什么:

string grade;
switch (percentageMark)
{
    case (90 - 100):
        grade = "A*";
        break;
    case (80 - 89):
        grade = "A";
        break;
    case (70 - 79):
        grade = "B";
        break;
    case (60 - 69):
        grade = "C";
        break;
    case (50 - 59):
        grade = "D";
        break;
    case (40 - 49):
        grade = "E";
        break;
    case (0 - 39):
        grade = "U";
        break;
}

我收到错误说 "The label 'case -9:' already occurs in this switch statement",但仅在情况 3、4、5 和 6 中出现。有人能告诉我为什么会收到这些错误吗

你不能有范围以防万一。

您必须使用多个大小写,例如:

case 90:
case 91:
case 92:
case 93:
case 94:
...
...
case:100:
        grade = "A*";

或者您可以使用 if 语句来应用范围:

if(percentageMark >= 90 && percentageMark <=100)
   grade = "A*";

正如 Ehsan 已经指出的,您不能在大小写内使用范围。在你的情况下,看起来使用 if..else 而不是 switch case.

会更好

像这样:

if(percentageMark >= 90 && percentageMark <=100)
   grade = "A*";
else if(percentageMark >= 80)
   grade = "A";
else if(percentageMark >= 70)
   grade = "B";
else if(percentageMark >= 60)
   grade = "C";
else if(percentageMark >= 50)
   grade = "D";
else if(percentageMark >= 40)
   grade = "E";
else
   grade = "U";

遗憾的是,C# 的开关不支持范围。

您将不得不使用 if 和 else if。

对于您的代码,这将是这样的:

if (value >= 90 && value <= 100)
{
    // Your code
}
else if (value >= 80 && value < 90)
{
    // Your code
}
else if (value >= 70 && value < 80)
{
    // Your code
}

等等

当然,如果您想使用开关并且成绩始终是 0 到 100 之间的值,那么您可以使用此开关:

switch(grade)
{
    case grade > 90:
        // A*
        break;
    case grade > 80:
        // B
        break;
}

等等