如何在C#中从列表中的对象中删除所有指定的内容

本文关键字:删除 对象 列表 | 更新日期: 2023-09-27 18:25:22

我有一个列表,如下所示:

STUDENT: John, TEST ONE: A, TEST TWO: A, TEST THREE: D
STUDENT: Greg, TEST ONE: F, TEST TWO: B, TEST THREE: D

一旦用户输入姓名,我如何删除特定学生的数据?我尝试过做以下操作,但不起作用:

List<object> list = new List<object>(); // contains the list of students that
                                       //  were appended

然后,在一个方法的内部,这里是我写的一些代码:

Console.Write("Enter the name of the student you want to remove: ");
string removedStudent = Console.ReadLine();
list.RemoveAll(s => s == removedStudent);

当代码运行并且我输入Greg作为要删除的学生的名称时,什么都不会发生。我打印了这份名单,格雷格仍然在名单上。所以,与其这样打印:

STUDENT: John, TEST ONE: A, TEST TWO: A, TEST THREE: D

它仍然像一样打印

STUDENT: John, TEST ONE: A, TEST TWO: A, TEST THREE: D
STUDENT: Greg, TEST ONE: F, TEST TWO: B, TEST THREE: D

有没有一种方法可以通过指定学生的名字来删除整行?

编辑:

以下是我要求用户输入学生信息的部分:

class StudentsIO
{
    public object getInput()
    {
        Console.Write("Enter student name: ");
        string studentName = Console.ReadLine();
        Console.Write("Enter test 1 score: ");
        string test1 = Console.ReadLine();
        Console.Write("Enter test 2: ");
        string test2 = Console.ReadLine();
        Console.Write("Enter test 3: ");
        string test3 = Console.ReadLine()
        Students students = new Students(studentName,test1,test2,test3);
        return students;
    }
}

以下是我将学生添加到列表中的位置:

StudentIO newStudent = new StudentIO();
object studentList = newStudent.getInput();
list.Add(studentList);

如何在C#中从列表中的对象中删除所有指定的内容

首先,正如Ron Beyer在他的评论中所暗示的,您应该使用比List<object>更具体的东西。我不确定你的学生是什么数据类型,但假设他们是一个类Student,具有指定名称的Student属性。然后你就有了List<Student>

由于列表中包含对象(而非学生),1ist.removeAll(s => s == removedStudent)使用在对象上定义的==运算符来进行对象比较。您输入的字符串与列表中的"学生"不是同一对象。如果你有List<Student>,那么你会使用:

list.removeAll(s => s.STUDENT == removedStudent);

从列表中删除该学生。

我无法从你的问题中判断出你的对象是什么样子的,但你尝试过这样的方法吗?

list.RemoveAll(s => s.STUDENT == removedStudent);

此处也回答

我建议:

students.RemoveAll(s => string.Compare(s.Name, studentNameToRemove, true) == 0);