📜  c# 过滤器列表 - C# (1)

📅  最后修改于: 2023-12-03 15:29:48.365000             🧑  作者: Mango

C# 过滤器列表

过滤器(Filter)是C#中一种很常见的编程模式,它用于对一组对象(或者集合)进行过滤以达到筛选目的。在C#中,可以使用LINQ语法或者基于委托(Delegate)的语法创建过滤器函数(Filter Function)来完成过滤操作。本篇文章将介绍C#中常见的过滤器列表。

LINQ语法
Where

Where方法是LINQ中最基本的过滤器之一,它用于从一个集合中筛选符合条件的元素。具体使用方法如下:

var result = collection.Where(element => element.Property == value);

其中,collection为要进行筛选的集合,element代表每一个元素,Property为元素的属性,value为要筛选的值。例如,下面代码将从一个字符串集合中筛选长度为3的字符串:

var collection = new List<string>{"hello", "world", "you", "me"};
var result = collection.Where(s => s.Length == 3); //result = {"you", "me"}
FirstOrDefault

FirstOrDefault方法用于返回集合中第一个符合条件的元素。如果集合中不存在符合条件的元素,则返回默认值(null)。具体使用方法如下:

var result = collection.FirstOrDefault(element => element.Property == value);

例如,下面代码将从一个学生集合中返回第一个年龄大于18岁的学生,如果不存在则返回null:

class Student
{
    public string Name {get;set;}
    public int Age {get;set;}
}

var students = new List<Student>{new Student{Name="Tom", Age=16}, new Student{Name="Jerry", Age=20}, new Student{Name="Lucy", Age=18}};
var result = students.FirstOrDefault(s => s.Age > 18); //result = {Name="Jerry", Age=20}
Select

Select方法用于对集合中的元素进行转换,并返回转换后的集合。具体使用方法如下:

var result = collection.Select(element => expression);

其中,collection为要进行转换的集合,element代表每一个元素,expression为转换表达式。例如,下面代码将从一个整数集合中返回每个元素加10后的新集合:

var collection = new List<int>{1, 2, 3, 4};
var result = collection.Select(s => s + 10); //result = {11, 12, 13, 14}
基于委托的语法
FindAll

FindAll方法用于从一个集合中筛选出符合条件的所有元素,返回一个新的集合。具体使用方法如下:

List<T> result = collection.FindAll(predicate);

其中,collection为要进行筛选的集合,predicate为筛选条件(即委托)。例如,下面代码将从一个学生集合中筛选出所有年龄大于等于18岁的学生:

class Student
{
    public string Name {get;set;}
    public int Age {get;set;}
}

var students = new List<Student>{new Student{Name="Tom", Age=16}, new Student{Name="Jerry", Age=20}, new Student{Name="Lucy", Age=18}};
var result = students.FindAll(s => s.Age >= 18); //result = {{Name="Jerry", Age=20}, {Name="Lucy", Age=18}}
Any

Any方法用于判断集合中是否存在符合条件的元素。具体使用方法如下:

bool result = collection.Any(predicate);

其中,collection为要检查的集合,predicate为检查条件(即委托)。例如,下面代码将判断一个整数集合中是否存在奇数:

var collection = new List<int>{2, 4, 6, 8};
var result = collection.Any(s => s % 2 == 1); //result = false
总结

本文介绍了C#中常见的过滤器列表,包括LINQ语法中的Where、FirstOrDefault和Select方法,以及基于委托的语法中的FindAll和Any方法。这些过滤器可以帮助我们更方便地对集合进行筛选,提高开发效率。