Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 收益率、FindAll和局部变量之间的比较_C#_.net_Oop_Collections_Yield - Fatal编程技术网

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);