首页 > 解决方案 > 尝试输出字母等级

问题描述

我正在尝试创建一种将小数转换为字母等级的表格。问题是 letterGrade 在该方法的当前上下文中不存在,但我如何从本质上使其“返回”。我是 C# 新手。我会很感激我能得到的任何帮助。

    private void txtNumberGrade_TextChanged(object sender, EventArgs e)
    {
        txtNumberGrade.Focus();
    }

    private void txtLetterGrade_TextChanged(object sender, EventArgs e)
    {

//下面这一行出错

    txtLetterGrade.Text = letterGrade;

//上面这一行的错误

    }

    private void btnCalculate_Click(object sender, EventArgs e)
    {
        decimal score = Convert.ToDecimal(txtNumberGrade.Text);
        string letterGrade = "";
        if (score >= 90)
        {
            letterGrade = "A";
        }
        else if (score >= 80)
        {
            letterGrade = "B";
        }
        else if (score >= 70)
        {
            letterGrade = "C";
        }
        else if (score >= 60)
        {
            letterGrade = "D";
        }
        else if (score >= 0)
        {
            letterGrade = "F";
        }
        else {
            letterGrade = "Z";
        }


    }
}

标签: c#

解决方案


可以做的是创建一个函数来返回你需要的成绩。下面我使用了Decimal.TryParse 方法,它将数字的字符串表示形式转换为其 Decimal 等效项,返回值指示转换是成功还是失败。如果它确实成功了,那么score就会有这个值。

 private static string GetGrade(string decGrade)
 {
    if (decimal.TryParse(decGrade, out decimal score))
    {
        if (score >= 90)
        {
           return "A";
        }
        else if (score >= 80)
        {
           return "B";
        }
        else if (score >= 70)
        {
           return "C";
        }
        else if (score >= 60)
        {
           return "D";
        }
        else if (score >= 0)
        {
           return "F";
        }
        else 
        {
           return "Z";
        }
    }
    else { return "NA"; }
 }

现在您可以在TextChanged事件中这样调用它:

private void txtNumberGrade_TextChanged(object sender, EventArgs e)
{
   txtLetterGrade.Text = GetGrade(txtNumberGrade.Text);      
}

参考:

Decimal.TryParse 方法- https://docs.microsoft.com/en-us/dotnet/api/system.decimal.tryparse?view=netcore-3.1


推荐阅读