Получить одно значение из ArrayList из текстового поля в окне сообщения - PullRequest
0 голосов
/ 25 апреля 2018

Я изучаю 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 голосов
/ 25 апреля 2018

Во-первых, вы, вероятно, хотите создать несколько экземпляров класса 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");
      }
0 голосов
/ 25 апреля 2018

Здесь и в Интернете достаточно ответов, чтобы помочь вам в решении вашей задачи.Прежде всего, удалите ArrayList, поскольку он упаковывает все в объект, а затем вам нужно беспокоиться о распаковке.

Используйте список, который будет выглядеть примерно так:

var allGrades = new List<Test>()

Затем просто используйте linqна запрос:

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

Та-да ... работа выполнена

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...