如何在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);
首先,正如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);