Bal*_*and -1 c# if-statement operation ternary statements
我被要求在Windows窗体应用程序中创建一个标记级转换器.
我的代码来自点击按钮.一旦用户将他们的标记输入"Markbox"并单击该按钮,if语句就会运行,它将找到正确的标记范围.然后它将显示与"Gradelb"中的标记相关的等级.
下面是按钮单击命令下的代码.我想缩减它以减少代码行空间并使其更易于管理.
void SubmitBtn_Click(object sender,EventArgs e){
int mark = int.Parse(Markbox.Text);
if (mark >= 45 && mark <= 50) Gradelb.Text = "A*";
else if (mark >= 40 && mark < 45) Gradelb.Text = "A";
else if (mark >= 35 && mark < 40) Gradelb.Text = "B";
else if (mark >= 30 && mark < 35) Gradelb.Text = "C";
else if (mark >= 25 && mark < 30) Gradelb.Text = "D";
else if (mark >= 20 && mark < 25) Gradelb.Text = "E";
else if (mark >= 0 && mark < 20) Gradelb.Text = "U";
else MessageBox.Show("Please enter a mark between 0-50");
Run Code Online (Sandbox Code Playgroud)
对于任何错误或不正确的术语表示歉意,我是新的学徒员工.
string Gr = new string[] { "A*", "A", "B", "C", "D", "E", "U" };
if(mark >=0 && mark <= 50)
Gradelb.Text = Gr[10 - Math.Max(4, (int)Math.Ceiling(mark/5f))];
else
MessageBox.Show("Please enter a mark between 0-100");
Run Code Online (Sandbox Code Playgroud)
需要注意的是:在经历了十年的"一线"生活之后,我可以告诉你一件事:无法保证这段代码比你的代码更有效率.
说明
由于它们之间的等级和标记范围遵循固定模式,因此我创建了一个等级数组,以便我可以通过数组索引来引用每个等级.现在我需要的是一个可以将给定数字转换为索引的表达式.
46-50 => 0
40-45 => 1
and so on...
Run Code Online (Sandbox Code Playgroud)
这可以通过将数字除以5来完成(因为这是您示例中的组大小).所以例如将41除以5会得到8.2.对其执行a Ceiling()(返回最接近的大小或等于整数)将给出9.从10减去此值将为您提供第二组的索引(即A级).
Math.Max()(返回两个参数中较大的一个)就是确保超出数组边界的值不会导致异常.当标记为15或更小时,将是这种情况.
| 归档时间: |
|
| 查看次数: |
443 次 |
| 最近记录: |