从消息框中的文本框中获取ArrayList中的单个值

时间:2018-04-25 13:57:23

标签: c# arraylist struct

我正在学习结构和Arraylist进行学校练习,而不是作业。我想知道在我的按钮点击事件中,在消息框中获得成绩的最佳方法是什么。如果有人能指出我正确的方向,将非常感谢,谢谢!

private ArrayList allGrades = new ArrayList();

public struct Test
{
    public int score;
    public string grade;
}

private void btnFindGrade_Click(object sender, EventArgs e)
{
    int myGrade = Convert.ToInt32(txtScore.Text);

    foreach (Test x in allGrades)
    {

    }
}

private void Form1_Load(object sender, EventArgs e)
{
    Test t;
    t.score = 299;
    t.grade = "F";

    allGrades.Add(t);

    t.score = 349;
    t.grade = "D";

    allGrades.Add(t);

    t.score = 399;
    t.grade = "C";

    allGrades.Add(t);

    t.score = 449;
    t.grade = "B";

    allGrades.Add(t);

    t.score = 500;
    t.grade = "A";

    allGrades.Add(t);
}

我忘了提及,对于我的应用程序,它只是一个带按钮的文本框,我输入你在我的代码中看到的分数,然后我想在一个信息框中获得用户等级。

2 个答案:

答案 0 :(得分:0)

这里和网上有很多答案可以帮助您完成任务。首先,删除ArrayList,因为它将所有内容都放入对象中,然后您需要担心取消装箱。

使用看起来很像的列表:

var allGrades = new List<Test>()

然后只需使用linq查询:

allGrades.FirstOrDefault(x => x.grade == myGrade)

Ta-da ......完成工作

答案 1 :(得分:0)

首先,您可能想要创建Test类的几个实例:

                Test t = new Test();
                t.score = 299;
                t.grade = "F";

                allGrades.Add(t);

                t = new Test(); 
                t.score = 349;
                t.grade = "D";

                allGrades.Add(t);

                t = new Test(); 
                t.score = 399;
                t.grade = "C";

                allGrades.Add(t);

                t = new Test(); 
                t.score = 449;
                t.grade = "B";

                allGrades.Add(t);

                t = new Test(); 
                t.score = 500;
                t.grade = "A";

                allGrades.Add(t);

或更短的版本:

      allGrades.Add(new Test() {score = 299, grade = "F"});
      allGrades.Add(new Test() {score = 349, grade = "D"});
      allGrades.Add(new Test() {score = 399, grade = "C"});
      allGrades.Add(new Test() {score = 449, grade = "B"});
      allGrades.Add(new Test() {score = 500, grade = "A"}); 

收集完集合后,您可以找到给定成绩的第一个Test项目:

      private void btnFindGrade_Click(object sender, EventArgs e) {
        int myGrade = Convert.ToInt32(txtScore.Text);

        Test found = allGrades
          .OfType<Test>()
          .FirstOrDefault(item => item.grade == myGrade);

        if (found != null) {
          MessageBox.Show($"score: {found.score} grade: {found.Grade}");
        }
        else 
          MessageBox.Show($"Not found");
      }