Записать объект в массив List

176
10 мая 2019, 04:20

Работал над своей практической работой, и у меня поломался вывод информации(в логическом смысле - то есть выводит не то, что предусматривалось программой). Хотя до этого работал, и работал нормально(я заметил эту проблему после того как попытался вывести этот участок кода(с выводом) в отдельную ф-цию(предусматривалось многократное использование в коде)).
Я ничего не понял, что произошло и "почему?".
Я ввожу допустим инфу про два объекта, а оно запоминает только последний и перезаписывает первый, в итоге выводит два блока с одинаковой инфой.
Вот код:

static void Main(string[] args)
    {
        List <Student> allstudents = new List<Student>();
        string temp = " ";
        int choise = 0;
        bool enterOrEsc = true;

        do
        {
            Console.WriteLine("Hi! Welcome in public account DEKANAT");
            Console.WriteLine("What do you want to do?");
            Console.WriteLine("1. Add information.");
            Console.WriteLine("2. Show information.");
            Console.WriteLine("3. Delete information.");
            Console.WriteLine("4. Change information.");
            Console.WriteLine("5. Search.");
            Console.WriteLine("6. Exit.");
            Console.Write("Enter number of your choise: ");
            choise = Checking(temp, choise);
            switch (choise)
            {
                case 1:
                    //adding information
                    Student _student = new Student(/*"firstName", "secondName", "fatherName", "sex", 3, "group", 5*/);
                    while (true)
                    {
                        Console.WriteLine("Add information about student ");
                        Console.Write("Enter first name (Empty - Exit): ");
                        _student.firstName = Console.ReadLine();
                        if (string.IsNullOrWhiteSpace(_student.firstName)) break;
                        Console.Write("Enter second name: ");
                        _student.secondName = Console.ReadLine();
                        Console.Write("Enter father name: ");
                        _student.fatherName = Console.ReadLine();
                        Console.Write("Enter sex: ");
                        _student.sex = Console.ReadLine();
                        Console.Write("Enter course: ");
                        _student.course = Convert.ToInt32(Console.ReadLine());
                        Console.Write("Enter group: ");
                        _student.firstName = Console.ReadLine();
                        Console.Write("Enter grade: ");
                        _student.group = Console.ReadLine();
                        allstudents.Add(_student);
                    }
                    // entering information
                    break;
                case 2:
                    if (allstudents.Count() == 0) Console.WriteLine("There are no information -__(*_*)__- ");
                    Console.WriteLine();
                    int numerator = 0;
                    foreach (Student student in allstudents)
                    {
                        numerator++;
                        Console.WriteLine("№" + numerator);
                        Console.WriteLine(student.firstName);
                        Console.WriteLine(student.secondName);
                        Console.WriteLine(student.fatherName);
                        Console.WriteLine(student.sex);
                        Console.WriteLine(student.course);
                        Console.WriteLine(student.group);
                        Console.WriteLine(student.grade);
                    }
                    //Show(allstudents);
                    break;
                case 3:
                    Console.Write("Which information you want to delete? Write number, please: ");
                    int _delete = Int32.Parse(Console.ReadLine());
                    allstudents.RemoveAt(_delete - 1);
                    break;
                case 4:
                    Console.WriteLine("What block with information you want to change?");
                    Console.Write("Enter the number, please:");
                    choise = Checking(temp, choise);
                    Console.Write("First name: ");
                    allstudents[choise - 1].firstName = Console.ReadLine();
                    Console.Write("Second name: ");
                    allstudents[choise - 1].secondName = Console.ReadLine();
                    Console.Write("Father name: ");
                    allstudents[choise - 1].fatherName = Console.ReadLine();
                    Console.Write("Sex: ");
                    allstudents[choise - 1].sex = Console.ReadLine();
                    Console.Write("Course: ");
                    allstudents[choise - 1].course = Int32.Parse(Console.ReadLine());
                    Console.Write("Group: ");
                    allstudents[choise - 1].group = Console.ReadLine();
                    Console.Write("Grade: ");
                    allstudents[choise - 1].grade = Int32.Parse(Console.ReadLine());
                    break;
                case 5:
                    Console.WriteLine("Search is realized by three parameters: First name, course and group.");
                    for(int x = 0; x < allstudents.Count(); x++)
                    {
                    }
                    break;
                case 6:
                    Environment.Exit(0);
                    break;
            }
            Console.WriteLine("Do you want to continue?(Press enter - continue, Esc - exit)");
            var enteroresc = Console.ReadKey();
            if (enteroresc.Key == ConsoleKey.Enter) enterOrEsc = true;
            else if (enteroresc.Key == ConsoleKey.Escape) break;
        } while (enterOrEsc == true);
        Console.WriteLine("");
    }
    static int Checking(string any_str, int any_number)
    {
        for(; ; )
        {
            any_str = Console.ReadLine();
            if (Int32.TryParse(any_str, out any_number))
            {
                break;
            }
            else
            {
                Console.WriteLine("Error! Please, try again: ");
            }
        }
        return any_number;
    }
    //static void Show (List<Student> array)
    //{
    //    int numerator = 0;
    //    foreach (Student student in array)
    //    {
    //        numerator++;
    //        Console.WriteLine("№" + numerator);
    //        Console.WriteLine(student.firstName);
    //        Console.WriteLine(student.secondName);
    //        Console.WriteLine(student.fatherName);
    //        Console.WriteLine(student.sex);
    //        Console.WriteLine(student.course);
    //        Console.WriteLine(student.group);
    //        Console.WriteLine(student.grade);
    //    }
    //}
}

Я бы и сам исправил, но я даже не знаю к чему придратся, если буквально недавно всё работало - каких-то изменений, которые могли повлиять на корректный ввод данных нету.

Answer 1

Нашел ошибочку, а все из-за невнимательности и нагромождения кода:

 Console.Write("Enter group: ");
 _student.firstName = Console.ReadLine();
 Console.Write("Enter grade: ");
 _student.group = Console.ReadLine();
READ ALSO
Зачем нужен struct?

Зачем нужен struct?

Объясните пожалуйста, зачем нужна конструкция struct(пример желателен на c#), если можно использовать простые классы?

189
,cdb работа с файлами

,cdb работа с файлами

Может кто нибудь привести примеры работы сcdb файлами? В гугле нашёл только то, что этим форматом не пользуются и вот делайте на чём нибудь...

180
Книги и учебные ресурсы по Unity3D

Книги и учебные ресурсы по Unity3D

Собираем подборку литературы и документации по Unity3D

182
Как задать DataContext для ListBoxItem внутри UserControl?

Как задать DataContext для ListBoxItem внутри UserControl?

Создал UserControl с ListBox внутри:

174