我有一个类对象:
Student student = new Student("Ram",20, new Address(hNo: 10, sNo: "10"), new Marks[] { new Marks("Maths", 90), new Marks("Science", 80), new Marks("Physics", 95) });
当我使用RemoveAll()方法从类中删除项目时,我得到以下错误:
无法转换 ' System.Collections.Generic.IEnumerable'至 ' System.Predicate'
这是我正在使用的代码:
string subject="Maths";
student.marks.ToList().RemoveAll(student.marks.Where(x => x.subject != marks));
我想从学生班级对象中移除标记("数学",90),但是失败了。
答案 0 :(得分:5)
让我们把它分解为更简单的东西:
<.ui.view.ScreenProgress
android:id="@+id/progress"
android:layout_width="0dp"
android:layout_height="0dp"/>
这让我:
现在,如果我这样做:
Marks[] marks = new Marks[]
{
new Marks("Maths", 90),
new Marks("Science", 80),
new Marks("Physics", 95)
};
我最终获得List<Marks> list = marks.ToList();
的副本。我有这个:
现在,如果我致电marks
,我会从list.RemoveAll(x => x.Subject != "Maths");
删除除"Maths"
主题之外的所有内容。它现在看起来像这样:
但由于这是[{1}}的副本,因此list
仍然相同:
由于marks
是一个数组,除非重新创建数组,否则无法删除任何元素。 LINQ提供了一种简单的方法:
marks
这就是你应该做的事情。
或者,将marks
课程的marks = marks.Where(x => x.Subject != "Maths").ToArray();
属性设为Marks
,而不是Student
。
List<Marks>
然后你可以直接在它上面调用Marks[]
,如下所示:
public class Student
{
public Student(List<Marks> marks)
{
this.Marks = marks;
}
public List<Marks> Marks;
}
答案 1 :(得分:3)
RemoveAll
方法希望您为它提供一个lambda表达式,用于过滤要删除的项目,并为您提供符合条件的项目集合。
只需将调用更改为仅使用表达式即可完成:
string subject="Maths";
student.marks = student.marks.Where(x => x.subject == subject).ToArray();