我有两节课.第一个是Person,第二个是Student(继承自Person).我想过滤一个通用列表,找到所有等级高于7的学生.我提出了以下解决方案:
class Person
{
public string Name {get; set;}
}
class Student : Person
{
public decimal Grade {get; set;}
}
class Program
{
static void Main(string[] args)
{
List<Person> people = new List<Person>();
people.Add(new Person() {Name="John"});
people.Add(new Student() {Name="Joe", Grade=6});
people.Add(new Student() {Name="Jane", Grade=8});
people.Where(delegate (Person person) {
var student = person as Student;
return student != null && student.Grade > 7;
});
}
}
Run Code Online (Sandbox Code Playgroud)
是否有更简单的方法来过滤此列表?
Hog*_*gan 29
我看到的唯一改进是使用OfType
,就像这样
var result = people.OfType<Student>().Where(s => s.Grade > 7);
Run Code Online (Sandbox Code Playgroud)
...而且我的语法更简单......但这是旁观者的眼睛.