case / switch语句c#?

我不知道如何在c#中编写它。 我知道如何在Delphi中做到这一点。

这是我如何在Delphi中完成的:

Case Total of
    80..100 : ShowMessage ('You got an A!');
    60..79  : ShowMessage ('You got a B!');
    50..59  : ShowMessage ('You got a C!');
    40..49  : ShowMessage ('You got a D!');
    0..39   : ShowMessage ('You got an E...');
  end;

我已经阅读过这个教程,但我不知道如何以我需要的方式使用/编写它。

这是我在C#中的版本:

switch (Total) //'Total' is a bunch of Integers divided together to get a Percentage
            {
             case 80..100: //Where 80% to 100% would achieve an A
            {
             MessageBox.Show("You got an A!");
            }
             case 60..79: //Where 60% to 79% would achieve a B
            {
             MessageBox.Show("You got a B!");
            }

这可能吗?

谢谢。


要在C#中的switch / case语句中表示范围,您必须手动列出这些个案

switch (Total) {
  case 80:
  case 81: 
  ...
  case 100:
    MessageBox.Show("you got an A");
    break;
  ...
}

对于这样的大范围,尽管使用一系列if语句可能会更好

if (Total >= 80 && Total <= 100) { 
   MessageBox.Show("you got an A");
} else if (Total >= 70) { 
   MessageBox.Show("you got a B");
}

C#没有特别灵活的switch语句。 这是故意的,选项是有限的,以确保代码生成速度很快。 C#从来不是一种隐藏执行成本的语言。 运行时实现是通过一个跳转表,由switch()表达式索引。 非常快,但不是很灵活。

另一种方法是明确的if / else if链。 与VB.NET或Delphi编译器生成的完全相同的代码,但是由人工编写。 不是非常漂亮,但足够有效:

if (Total < 0 || Total > 100) throw new ArgumentException("Not a valid grade");
if      (Total >= 80) ShowMessage ('You got an A!');
else if (Total >= 60) ShowMessage ('You got a B!');
else if (Total >= 50) ShowMessage ('You got a C!');
else if (Total >= 40) ShowMessage ('You got a D!');
else                  ShowMessage ('You got an E...');

这现在也显示了与代码相关的成本,总计值最多可以进行6次比较。 如果速度很重要,范围有限,那么考虑切换到一个查找表,一个字典<>。 ShowMessage()不是必需的,它是一个昂贵的方法。


如果它应该是一个开关,那么它应该是这样的:

switch(Total)
{
     case 100:
     case 99:
     //...
     case 80:
         MessageBox.Show("You got an A!");
         break;

     case 79:
     // ...
}

如果可以使用if语句,我会推荐这样做:

if (Total < 0)
{
}
else if (Total < 40)
    MessageBox.Show("You got an E...")
else if (Total < 50)
    MessageBox.Show("You got a D!");
else if (Total < 60)
// etc.

跳你可以使用这个答案。

链接地址: http://www.djcxy.com/p/84453.html

上一篇: Case/switch statements c#?

下一篇: Switch case, check ranges in C# 3.5