Невозможно удалить элемент из списка C#

У меня есть список студентов C#. Я не могу удалить элемент по идентификатору.

Программа.cs

static void RemoveStudent(StudentManager studentManager)
{
    Console.WriteLine("Which student? Insert ID:");
    int id = Convert.ToInt32(Console.ReadLine());
    Console.WriteLine(id);
    studentManager.RemoveStudent(1);
}

Как выглядит студенческий класс:

public class Student
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int Age { get; set; }
    public string Major { get; set; }
}

Как выглядит StudentManagerClass:

public class StudentManager
{
    private List<Student> students = new List<Student>();

    public void RemoveStudent(int id)
    {
        students.RemoveAt(id);
    }
   
    //...
}

Программа завершает работу без каких-либо подсказок при попытке удалить элемент.

Обратите внимание, что RemoveAt удаляет ученика по этому индексу без учета идентификаторов.

ProgrammingLlama 20.05.2024 13:22
students.RemoveAll(student => student.Id == id);
Johnathan Barclay 20.05.2024 13:25
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
116
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Проблема в вашем коде заключается в том, что вы используете метод RemoveAt, который удаляет студента на основе индекса, а не свойства Id. Кроме того, RemoveAt ожидает, что индекс будет начинаться с нуля, поэтому, если идентификатор не соответствует индексу, это вызовет исключение.

Чтобы это исправить, вам следует найти студента по его свойству Id, а затем удалить его из списка. Скажите, сработало ли это для вас :))

Ответ принят как подходящий

List.RemoveAt документально выполняет следующие действия:

Удаляет элемент по указанному индексу списка.

(курсив мой)

В вашем случае id — это не индекс элемента (который представляет собой последовательную нумерацию элементов в списке, начиная с 0), а значение его конкретного свойства.

Чтобы удалить элемент по заданному свойству, вы можете использовать List.RemoveAll, который:

Удаляет все элементы, соответствующие условиям, определенным указанным предикатом.

В этом предикате вы можете сравнить свойство Id со свойством, которое хотите удалить:

//----------------------------vvvvvvvvvvvvvvvv--
students.RemoveAll(student => student.Id == id);

@JohnathanBarclay спасибо за редактирование. Id здесь действительно собственность, а не поле.

wohlstad 20.05.2024 15:40

Другие вопросы по теме

Похожие вопросы

Использование Lazy<T> для хранения значения токена в службе с заданной областью в .NET 6
Ошибка: обнаружено одно или несколько повторяющихся имен файлов. Все имена файлов изображений должны быть уникальными: edupay (Resources\AppIcon\edupay.png
Передача IEnumerable<Entity> из представления в контроллер в ASP.NET Core 8 MVC
Как сделать этот шаблон URL-адреса приемлемым в ASP.NET Core?
Невозможно восстановить удаленного пользователя с помощью Graph API
Проблема: Ошибка 500 — «Не удалось загрузить определение API» в проекте .NET 8
`MySqlDataReader.GetGuid` возвращает неправильный UUID
Вопрос MudBlazor DataGrid — Как управлять действием автоматически создаваемой кнопки сохранения
Запуск консольного приложения C# .NET с использованием HtmlAgilityPack, который очищает веб-страницу и выполняет циклы, приводит к утечке памяти. В чем здесь проблема?
Как доказать, что метод присваивает параметру ссылку на другой объект при передаче типа значения по ссылке?