У меня есть список студентов 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);
}
//...
}
Программа завершает работу без каких-либо подсказок при попытке удалить элемент.
students.RemoveAll(student => student.Id == id);




Проблема в вашем коде заключается в том, что вы используете метод RemoveAt, который удаляет студента на основе индекса, а не свойства Id. Кроме того, RemoveAt ожидает, что индекс будет начинаться с нуля, поэтому, если идентификатор не соответствует индексу, это вызовет исключение.
Чтобы это исправить, вам следует найти студента по его свойству Id, а затем удалить его из списка. Скажите, сработало ли это для вас :))
List.RemoveAt документально выполняет следующие действия:
Удаляет элемент по указанному индексу списка.
(курсив мой)
В вашем случае id — это не индекс элемента (который представляет собой последовательную нумерацию элементов в списке, начиная с 0), а значение его конкретного свойства.
Чтобы удалить элемент по заданному свойству, вы можете использовать List.RemoveAll, который:
Удаляет все элементы, соответствующие условиям, определенным указанным предикатом.
В этом предикате вы можете сравнить свойство Id со свойством, которое хотите удалить:
//----------------------------vvvvvvvvvvvvvvvv--
students.RemoveAll(student => student.Id == id);
@JohnathanBarclay спасибо за редактирование. Id здесь действительно собственность, а не поле.
Обратите внимание, что
RemoveAtудаляет ученика по этому индексу без учета идентификаторов.