Case/switch statements在c#中是用于在多个选项中选择一个执行路径的控制流结构。它通过将一个变量的值与一系列case值进行比较,并在找到匹配的情况下执行相应的代码块。这种结构可用于替代使用多个if-else if语句的情况,使代码更加简洁和可读。
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!"); }
这样做可能吗?
谢谢。
问题出现的原因是在给定的代码中,使用了错误的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语句来替代。
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()是一个昂贵的方法。
在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
语句来代替。通过使用逻辑运算符来连接条件,可以轻松地表达范围条件,使代码更简洁和易于维护。