C# list对象FindAll函数的四种写法

在C#编程中,`List<T>` 是一个非常常用的集合类,它提供了丰富的操作方法,如查找、添加、删除等。在本篇文章中,我们将详细探讨`List<T>`的`FindAll`方法,并通过四种不同的写法来演示如何使用这个功能来筛选满足特定条件的元素。`FindAll`方法用于在列表中找到符合指定条件的所有元素,返回一个新的`List<T>`实例。 让我们了解`FindAll`的基本用法。以下是一个简单的例子,定义了一个`Person`类,包含`ID`和`Name`两个属性,并创建了一个`Person`对象的`List`: ```csharp using System.Collections.Generic; public class Person { public int ID { get; set; } public string Name { get; set; } } List<Person> list = new List<Person>() { new Person() { ID=1, Name="AndreySanches"}, new Person() { ID=2, Name="AlexandreTarifa"}, new Person() { ID=3, Name="EmersonFacunte"} }; ``` 现在,我们想找到`ID`大于1并且`Name`包含字母"A"的所有`Person`对象。这里展示了四种使用`FindAll`的方法: 1. **方法一:使用匿名方法** ```csharp List<Person> result = list.FindAll(FindFunc); public bool FindFunc(Person p) { return p.Name.Contains("A") && p.ID > 1; } ``` 这种方法通过传递一个名为`FindFunc`的委托(Delegate)作为参数,该委托接受一个`Person`对象并返回一个布尔值,表示该对象是否满足条件。 2. **方法二:使用显式委托** ```csharp List<Person> result = list.FindAll(delegate(Person p) { return p.Name.Contains("A") && p.ID > 1; }); ``` 与方法一类似,但这里直接在调用`FindAll`时定义了委托,而不是预先定义一个方法。 3. **方法三:使用Lambda表达式(带大括号)** ```csharp List<Person> result = list.FindAll(p => { return p.Name.Contains("A") && p.ID > 1; }); ``` Lambda表达式提供了一种更简洁的编写委托的方式。这里的`(p => { return p.Name.Contains("A") && p.ID > 1; })`相当于一个匿名方法,但它更紧凑,更易读。 4. **方法四:使用简化Lambda表达式** ```csharp List<Person> result = list.FindAll(p => p.Name.Contains("A") && p.ID > 1); ``` 这是Lambda表达式的最简形式,省去了大括号,因为表达式只有一行代码。在这里,`p => p.Name.Contains("A") && p.ID > 1`同样定义了一个接受`Person`对象的委托,返回一个布尔值。 这四种方法虽然写法不同,但功能完全相同,都是从`list`中找出`ID`大于1且`Name`包含字母"A"的所有`Person`对象。`FindAll`方法的核心在于传入的委托或Lambda表达式,它们定义了判断元素是否符合条件的逻辑。 关于"C#"中的`=>`符号,这是Lambda表达式的组成部分,也称为箭头运算符。它左边的`p`代表输入参数,右边的表达式则是基于这些参数的计算结果。`=>`将参数和表达式连接起来,使得代码更加简洁易读。 总结来说,`List<T>.FindAll`方法是C#中筛选列表元素的强大工具,结合Lambda表达式可以写出优雅且高效的代码。理解并熟练运用Lambda表达式是提升C#编程技能的重要步骤。























- 粉丝: 0
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 大数据时代翻译职业化的教学模式研究.docx
- 《软件工程实用教程》第11章软件项目管理.ppt
- (源码)基于LQR算法的机器人路径规划与跟踪系统.zip
- PLC控制的自动售货机设计-(2).doc
- 基于VC的网络聊天系统研究设计与实现.doc
- 安全管理事业部-:网上银行网络通讯安全解决方案.ppt
- 企业项目管理中的沟通和成本.docx
- 利用MATLAB实现连续信号采样与重构仿真课程设计.doc
- 大数据时代高校图书馆学科竞争力分析系统研究.docx
- 浅析网络战争中的国际法问题.docx
- 煤矿立井提升系统安全性分析及管理.docx
- 全国计算机等级测验二级java上机题库.doc
- 交通线路选择软件的研究与设计开发与实现研究与设计开发.doc
- 室内蜂窝移动通网络技术概述.doc
- 数学实验云计算辅助教学平台的建设初探.docx
- (源码)基于Node.js的个人博客网站.zip



- 1
- 2
前往页