如何使用C#

时间:2017-07-13 12:22:12

标签: c# linq

我有一个类对象:

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),但是失败了。

2 个答案:

答案 0 :(得分:5)

让我们把它分解为更简单的东西:

<.ui.view.ScreenProgress
            android:id="@+id/progress"
            android:layout_width="0dp"
            android:layout_height="0dp"/>

这让我:

marks

现在,如果我这样做:

Marks[] marks = new Marks[]
{
    new Marks("Maths", 90),
    new Marks("Science", 80),
    new Marks("Physics", 95)
};

我最终获得List<Marks> list = marks.ToList(); 副本。我有这个:

list

现在,如果我致电marks,我会从list.RemoveAll(x => x.Subject != "Maths");删除除"Maths"主题之外的所有内容。它现在看起来像这样:

list (2)

但由于这是[{1}}的副本,因此list仍然相同:

marks (2)

由于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();