Case/switch statements在c#中是用于在多个选项中选择一个执行路径的控制流结构。它通过将一个变量的值与一系列case值进行比较,并在找到匹配的情况下执行相应的代码块。这种结构可用于替代使用多个if-else if语句的情况,使代码更加简洁和可读。

15 浏览
0 Comments

Case/switch statements在c#中是用于在多个选项中选择一个执行路径的控制流结构。它通过将一个变量的值与一系列case值进行比较,并在找到匹配的情况下执行相应的代码块。这种结构可用于替代使用多个if-else if语句的情况,使代码更加简洁和可读。

我不知道如何用C#编写这个。我知道如何在Delphi中做。

这是我在Delphi中的做法:

Case Total of
    80..100 : ShowMessage ('你得到了A!');
    60..79  : ShowMessage ('你得到了B!');
    50..59  : ShowMessage ('你得到了C!');
    40..49  : ShowMessage ('你得到了D!');
    0..39   : ShowMessage ('你得到了E...');
  end;

我已经阅读了教程,但我不知道如何按照我需要的方式使用/编写它。

这是我在C#中的版本:

switch (Total) //'Total'是一组整数,它们除以一起得到一个百分比
            {
             case 80..100: //80%到100%将获得A
            {
             MessageBox.Show("你得到了A!");
            }
             case 60..79: //60%到79%将获得B
            {
             MessageBox.Show("你得到了B!");
            }

这样做可能吗?

谢谢。

0
0 Comments

问题出现的原因是在给定的代码中,使用了错误的switch语句的语法。解决这个问题的方法是将switch语句更正为正确的语法形式,或者使用if语句来替代。

在给定的代码中,如果打算使用switch语句,应该按照下面的形式编写:

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.

这样可以避免问题中提到的一个分数触发所有的消息框的情况发生。在使用if语句时,由于使用了"else if"的结构,当条件满足时,只会执行第一个符合条件的代码块,然后跳过后续的代码块。

问题出现的原因是代码中使用了错误的switch语句的语法,解决的方法是更正语法或使用if语句来替代。

0
0 Comments

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...');

这个示例展示了代码的成本,可以对Total值进行多达6次比较。如果速度至关重要且范围有限,可以考虑切换到查找表,即Dictionary<>。但在这里并不需要,因为ShowMessage()是一个昂贵的方法。

0
0 Comments

在C#中的switch / case语句中表达一个范围时,你必须手动列出每个情况。然而,对于像这样的大范围,最好使用一系列if语句来代替。

出现这个问题的原因是switch / case语句在C#中不能直接表示范围。相反,它要求你手动列出每个可能的情况。对于大范围的情况,这样的实现方式会非常冗长和繁琐。

为了解决这个问题,可以使用一系列if语句来代替switch / case语句。通过使用逻辑运算符,可以轻松地表达范围条件。这样可以使代码更简洁和易于维护。

以下是使用if语句来表达范围的示例代码:

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

通过使用逻辑运算符&&来连接条件,可以在一行中同时检查多个条件。这样,我们可以将范围的判断条件合并在一个if语句中,使代码更加简洁和易于理解。

总之,switch / case语句在C#中不能直接表示范围,必须手动列出每个情况。对于大范围的情况,最好使用一系列if语句来代替。通过使用逻辑运算符来连接条件,可以轻松地表达范围条件,使代码更简洁和易于维护。

0