利用谓词实现List<>的Find等高级操作

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;

}

时间: 2024-11-08 10:07:19

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

Django的orm的高级操作

Django的orm的高级操作 查询语法大全: 比较运算符 # id > 3 res = models.UserInfo.objects.filter(id__gt=3) # id >= 3 res = models.UserInfo.objects.filter(id__gte=3) # id < 3 res = models.UserInfo.objects.filter(id__lt=3) # id <= 3 res = models.UserInfo.objects.fil

线程高级操作(二)

之前在线程高级操作中说到了线程的高级操作包括修改线程的属性和进行线程之间的同步操作.线程的同步有两种方式,一种是使用互斥量一种是使用读写锁.上一篇文章说的是互斥量,这篇文章主要介绍的是读写锁. 读写锁与互斥量类似,但是读写锁相对于互斥量来说最大的特点就是并行性高.互斥锁每次只有一个线程可以得到锁进行操作,其他的线程处于阻塞状态.多线程的意义就在于高并发性,但是使用互斥量就会将并行操作编程串行操作,程序的效率会大打折扣. 读写锁的优点是读写锁分为两种,读线程和写线程.读线程只对共享资源进行读操作,

数据库的高级操作

高级操作 复制表结构 语法: ????create table 表B like 表A; 示例: 复制表中的数据 语法: ????create table 表B select *或字段列表 from 表A; 蠕虫复制 语法: ????insert into 表名[(字段列表)] select *或字段列表 from 表名; 修改操作 ????限制修改指定的行数. 语法: ????update 表名 set 字段=值... [where子句] limit n; 说明: ????在执行update语句

Eclipse高级操作 远程调试

Eclipse高级操作 远程调试 JPDA是SUN JDK自带的远程调试机制.它提供了一套标准的调试接口,可以从虚拟机一级允许外界用特定协议探测虚拟机内部的运作细节.只要你装了JDK1.2以上的SUN JDK,就已经有了JPDA支持.只要是用标准SUN JDK中java.exe运行的应用,就可以用JPDA进行远程调试.以WEB应用的开发为例,servlet和ejb的调试一直不是一件太容易的事情.虽然Jbuilder/Eclipse等有一些常见的应用服务器,如tomcat/weblogic的调试插

Git高级操作

本文是在Git操作指南基础上衍生出来的高级操作,如果你对git不是很熟悉,建议你先阅读Git操作指南. 一.忽略提交特定文件 如果你不想让一些文件上传到git仓库中,可以让Git忽略特定文件或是目录,通过vi ~/.gitconfig编辑git的配置文件,可以使用感叹号(注意英文)来指出例外的情况. 1 !*.a //所有文件后缀为a的都不提交 2 !/demo/ //文件demo下的所有文件都不提交 二.查看仓库历史记录 git log 用来查看仓库历史记录,有三个参数: oneline——把

【转载】8天学通MongoDB——第三天 细说高级操作

今天跟大家分享一下mongodb中比较好玩的知识,主要包括:聚合,游标. 一: 聚合 常见的聚合操作跟sql server一样,有:count,distinct,group,mapReduce. <1> count count是最简单,最容易,也是最常用的聚合工具,它的使用跟我们C#里面的count使用简直一模一样. <2> distinct 这个操作相信大家也是非常熟悉的,指定了谁,谁就不能重复,直接上图. <3> group 在mongodb里面做group操作有点

sql高级操作

同样也是用于记录以便日后联系用!里面基本包含了一般sql的高级用法! drop table if exists stu; create table stu( name varchar(30), age int, stuid int not null PRIMARY key AUTO_INCREMENT, idnum int, sex varchar(30), check(sex in ('男','女')) )charset=utf8; insert into stu (name,age,idnu

selenium学习笔记——高级操作

这篇主要介绍一下页面的高级操作:页面跳转.单选下拉框选择.frame切换.鼠标悬停.非网页弹窗 一.页面跳转/窗口跳转 两种方式:不关闭原窗口和关闭原窗口,建议采用第二种关闭原窗口这种方式   不关闭原窗口: 1 //获取当前窗口的句柄 2 String orighandle = driver.getWindowHandle(); 3 //遍历所有句柄 4 for(String handle : driver.getWindowHandles()){ 5 // 如果不是原窗口的句柄,那么就把句柄

Unix_文件系统高级操作_0

这是<UNIX初级教程>_第8章 UNIX文件系统高级操作的内容 感觉这一章的内容还是挺多的:(注:其间的下划线“_”是把命令与其它文字隔开,它不是命令的一部分) 1 读文件:只读版本view命令.读文件pg命令(MaoBook Os的命令中没有它,略过) 2 shell重定向:输出重定向,输入重定向 3 增强的文件打印功能_略过 4 文件操作命令:复制文件_cp命令.移动文件_mv命令.链接文件_ln命令.计算数字_wc命令. 5 文件名替换:?元字符|*元字符|[ ]元字符.元字符与隐藏文