Aid*_*inn 3 c# if-statement case
我没有生活线索如何在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;
Run Code Online (Sandbox Code Playgroud)
我已经阅读了这方面的教程,但我不知道如何以我需要的方式使用/编写它.
这是我在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!");
}
Run Code Online (Sandbox Code Playgroud)
这可能吗?
谢谢.
要switch / case在C#中的语句中表示范围,您必须手动列出案例
switch (Total) {
case 80:
case 81:
...
case 100:
MessageBox.Show("you got an A");
break;
...
}
Run Code Online (Sandbox Code Playgroud)
对于像这样的大范围,尽管使用一系列if语句可能更好
if (Total >= 80 && Total <= 100) {
MessageBox.Show("you got an A");
} else if (Total >= 70) {
MessageBox.Show("you got a B");
}
Run Code Online (Sandbox Code Playgroud)
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...');
Run Code Online (Sandbox Code Playgroud)
现在这也显示了与代码相关的成本,Total值最多可以进行6次比较.如果速度是必要的并且范围有限,那么考虑切换到查找表,字典<>.这里没有必要,ShowMessage()是一种昂贵的方法.