C# 收益率、FindAll和局部变量之间的比较
我想对C# 收益率、FindAll和局部变量之间的比较,c#,.net,oop,collections,yield,C#,.net,Oop,Collections,Yield,我想对Student对象列表应用过滤器。我找到了三种方法: 第一条路 通过使用FindAll List<Student> liste = Admin.GetStudentList().FindAll(x => x.Age > 20); 第三条道路 使用本地列表: public List<Student> GetStudentListByAge(int age){ List<Student> list2 = new List<Student&
Student
对象列表应用过滤器。我找到了三种方法:
第一条路
通过使用FindAll
List<Student> liste = Admin.GetStudentList().FindAll(x => x.Age > 20);
第三条道路
使用本地列表:
public List<Student> GetStudentListByAge(int age){
List<Student> list2 = new List<Student>();
foreach(Student s in Admin.GetStudentList()){
if(s.Age > age) list2.Add(s);
}
return list2;
}
公共列表GetStudentListByAge(int-age){
List list2=新列表();
foreach(Admin.GetStudentList()中的学生){
如果(s.Age>Age)列表2.添加(s);
}
返回列表2;
}
所以,我需要知道在这两者之间最好的方式是什么?为什么?在哪种情况下?第二种方法是最好的,因为它使用收益率,而且更通用。这正是在LINQ to对象中实现
的方式。因此,真正的答案是使用LINQ:
IEnumerable<Student> studentsByAge = Admin.GetStudentList().Where(x => x.Age > 20);
IEnumerable studentsByAge=Admin.GetStudentList()。其中(x=>x.Age>20);
另外:FindAll
在这种情况下也会表现良好,但它属于列表,这意味着如果您将类型更改为另一个集合,您也必须更改它。第二种方法是最好的,因为它使用收益率,而且更通用。这正是在LINQ to对象中实现的方式。因此,真正的答案是使用LINQ:
IEnumerable<Student> studentsByAge = Admin.GetStudentList().Where(x => x.Age > 20);
IEnumerable studentsByAge=Admin.GetStudentList()。其中(x=>x.Age>20);
另外:FindAll
在这种情况下也会表现良好,但它属于列表,这意味着如果您将类型更改为另一个集合,您也必须更改它。在这种情况下,可读性更强、可移植性更强、代码更少的集合。
这些是linq提供的方法,例如“All”、“Where”
在这种情况下,可读性更强、可移植性更强、代码更少的版本。
这些是linq提供的方法,例如“All”、“Where”
第一个作为第三个在内部实现。第二个将不会返回List
,而是IEnumerable
我个人会使用LINQ,比如:
Admin.GetStudentList().Where(x=>x.Age>20.ToList()
它很短,如果将来GetStudentList()
返回IQueryable
,则不需要重写此代码,而且它将比其他代码更高效。第一个代码作为第三个代码在内部实现。第二个将不会返回List
,而是IEnumerable
我个人会使用LINQ,比如:
Admin.GetStudentList().Where(x=>x.Age>20.ToList()
它很短,如果将来GetStudentList()
返回IQueryable
,您就不需要重写此代码,而且它会比其他代码更有效。为什么不使用LINQ的Where
?是的,这是另一种可能性。所以我需要哪一个是最好的方法?最快的?最具可读性?最不可能失败?您的要求是什么?您是否进行过测试和试用,以确定哪一个最适合您?@Default:我需要知道哪一个最快,即如果列表中的元素计数很大,哪一个最快可以给出结果?为什么不使用LINQ的Where
?是,这是另一种可能性。所以我需要哪一种是最好的,如何?最快的?最具可读性?最不可能失败?您的要求是什么?您是否进行过任何测试和试用,以确定哪一个最适合您?@Default:我需要知道哪一个最快,即如果列表中的元素数量很大,哪一个最快给出结果?这与Where
不完全一样Where
不接受int,而是一个谓词作为参数。它与Where
不完全相同其中
不使用int,而是使用谓词作为参数。
students.Where(s => s.FirstName == "s");
students.All(s => s.Age > 10);