public class Person
        {
            public int Id { get; set; }
            public string Name { get; set; }
            public int Age { get; set; }
        }

   private void button1_Click(object sender, EventArgs e) //利用谓词实现List<>的Find查询

{

List<Person> ListPerson = new List<Person>();

ListPerson.Add(new Person() { Name = "刘备" }); //注意这用new对象的赋值方法,没有参数的构造函数也能在创建同时就赋值

ListPerson.Add(new Person() { Name = "关羽" });

ListPerson.Add(new Person() { Name = "张飞" });

ListPerson.Add(new Person() { Name = "汉献帝" });

//一、Contain的注意,如果是引用类型,只能比较同地址的应用,不能比较值完全相同的元素

//虽然p1与ListPerson[1]完全一样,但由于Person是引用类型,所以ListPerson.Contains(p1)=false,而ListPerson.Contains(ListPerson[1])=true;

Person p1 = new Person() { Name = "关羽" };

p1 = ListPerson[1];

bool ct = ListPerson.Contains(p1);

//但是,如果Person不是类Class而是结构Struct,则变为值类型,上面两种写法都返回True

//Class和Struct还有几点区别

//1、struct不能包含不带参数的构造函数,但可以没有构造函数,在没有构造函数情况下,Person p1 = new Person() { Name = "关羽" };仍然可以

//2、struct中对象中的某一属性不能单独修改,只能整个对象一起替换,如不能写ListPerson[0].Name=="吕布",但是可以写ListPerson[0] = new Person() { Name = "吕布");

//二、谓词实现高级功能

//谓词就是形如List.Find(Predicate<T> match); 括号里的就是谓词,它可以是一个委托函数或是一个拉姆表达式

Person pc = ListPerson.Find(m => m.Name == "刘备"); //括号里的就是拉姆表达式,m代表ListPerson中的一个对象,

//=>后跟一个逻辑表达式。List中每一个元素都与该逻辑表达式匹配,如果对该元素表达式成立,则选中。对Find函数而言,返回第一个选中的元素。

//稍微复杂一点的拉姆表达式,返回汉献帝

pc = ListPerson.Find(m =>

{

if (m.Name.Length > 2)

return true;

return false;

});

//也可以用委托函数的方式实现谓词,语法为:

pc = ListPerson.Find(ListFind);

//Find返回第一个满足条件的元素,返回类型与List<>中的元素相同

//FindAll返回所有满足条件的元素,返回类型也是List<>,相当于返回子集

//FindLast返回最后一个匹配的元素

//TrueForAll,如果所有元素都满足条件,返回true,否则false,可用于验证

//Where与FindAll类似,只不过返回值IEnumerable,要ToList()一下才能返回List<>。例如List<Person> ListPerson2 = ListPerson.Where(m => m.Name != "刘备").ToList();

//RemoveAll剔除所有满足条件的元素

}

public bool ListFind(Person p) //委托函数的参数必须与待查找元素相同的类型,返回类型也必须的bool型

{

if (p.Name.Length > 2)

return true;

return false;

}

利用谓词实现List<>的Find等高级操作的更多相关文章

  1. SpringMVC整合Mongodb开发,高级操作

    开发环境: 操作系统:windows xpMongodb:2.0.6依 赖 包:Spring3.2.2 + spring-data-mongodb-1.3.0 + Spring-data-1.5 +  ...

  2. python文件高级操作

    python文件高级操作和注意事项等等 文件过大保护 由于read是一次性读取文件所有的内容,如果文件100G,内存就会吃不消,所以推荐使用read(size)一次读取指定字节/字符(根据rb,或者r ...

  3. 数据分析06 /pandas高级操作相关案例:人口案例分析、2012美国大选献金项目数据分析

    数据分析06 /pandas高级操作相关案例:人口案例分析.2012美国大选献金项目数据分析 目录 数据分析06 /pandas高级操作相关案例:人口案例分析.2012美国大选献金项目数据分析 1. ...

  4. [Session] SessionHelper2---C#关于Session高级操作帮助类 (转载)

    点击下载 SessionHelper2.rar 这个类是关于Session的一些高级操作1.添加时限制时间2.读取对象3.读取数据等等看下面代码吧 /// <summary> /// 联系 ...

  5. cassandra高级操作之索引、排序以及分页

    本次就给大家讲讲cassandra的高级操作:索引.排序和分页:处于性能的考虑,cassandra对这些支持都比较简单,所以我们不能希望cassandra完全适用于我们的逻辑,而是应该将我们的逻辑设计 ...

  6. MySQL学习笔记_9_MySQL高级操作(上)

    MySQL高级操作(上) 一.MySQL表复制 create table t2 like t1;               #复制表结构,t2可以学习到t1所有的表结构 insert into t2 ...

  7. MySQL学习笔记_10_MySQL高级操作(下)

    MySQL高级操作(下) 五.MySQL预处理语句 1.设置预处理stmt,传递一个数据作为where的判断条件 prepare stmt from "select * from table ...

  8. python列表(list)的使用技巧及高级操作

    python列表(list)的使用技巧及高级操作置顶 2018年03月25日 13:39:41 顽劣的石头 阅读数:5478 标签: python extend bisect list enumera ...

  9. C语言指针的高级操作

    C语言指针的高级操作 指针  指针 在上篇博客中我介绍了C语言指针的最基本操作,那么我在这篇博客中会介绍一下C语言指针的一些骚操作. 指向指针的指针 这名字乍一听有点拗口,再次一听就更加拗口了.先看定 ...

随机推荐

  1. 如何把pdf文档转化为word

    在工作中常常遇到大量的pdf文档,再加工进行处理文件,特别的不方便,需要转换为WORD. 尝试如下: 使用wps自带的工具转换,提示需要是会员才能进行.否则只能进行5页以下的转换. 再想是不是又有个这 ...

  2. Linux下安装配置git

    参考博客: https://www.cnblogs.com/luhouxiang/p/5801853.html但执行git --version命令会出现 git version 1.8.3.1 不是最 ...

  3. React 按需加载 - 代码分隔

    代码分隔 我们现在大多数React项目都是以Webpack 或者 Browserify等将一堆的jsx文件组织一起,并且由一个类似index.js的入口文件串联起来的单页面web页面. 例如: // ...

  4. web服务器与tomcat

    web服务器与tomcat 服务器分类: 硬件服务器和软件服务器 web服务器: 提供资源供别人访问 web: 网页的意思,资源. web资源分类: 动态的web资源:内容有可能发生改变的 静态的we ...

  5. 【JZOJ4924】【NOIP2017提高组模拟12.17】向再见说再见

    题目描述 数据范围 =w= 设h[i]表示,甲队得到i分的方案数. 那么h[(n+k)/2]和h[(n−k)/2]就是答案. 设g[i]表示,甲队得到至少i分的方案数. 那么h[i]=g[i]−∑j& ...

  6. 10种简单的Java性能优化(转)

    本文由 ImportNew - 一直在路上 翻译自 jaxenter.欢迎加入翻译小组.转载请见文末要求. 你是否正打算优化hashCode()方法?是否想要绕开正则表达式?Lukas Eder介绍了 ...

  7. 阿里云DDoS高防的演进:防御效果成核心

    分布式拒绝服务(DDoS)攻击这一网络公敌,是任何互联网业务的重大威胁.随着DDoS攻击工具化的发展,无论是简单野蛮的流量型攻击,还是复杂精巧的应用型攻击,黑客发起DDoS攻击变得越来越简单和自动化. ...

  8. JavaScript--缓动动画+轮播图

    上效果: 实现步骤: 最重要的是运动公式!!! <!DOCTYPE html> <html> <head> <meta charset="UTF-8 ...

  9. Kubernetes1.3新特性:支持GPU

    (一)  背景资料 GPU就是图形处理器,是Graphics Processing Unit的缩写.电脑显示器上显示的图像,在显示在显示器上之前,要经过一些列处理,这个过程有个专有的名词叫" ...

  10. 2019-2-27-如何替换一个-exe-的图标

    title author date CreateTime categories 如何替换一个 exe 的图标 lindexi 2019-02-27 20:33:16 +0800 2019-2-27 2 ...