zoukankan      html  css  js  c++  java
  • 利用谓词实现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;

            }

  • 相关阅读:
    python用于web题里写解密脚本
    改变checkbox和radio的默认样式
    div内元素垂直居中
    icheck.js插件
    glyphicons字形图标
    没有内容的span元素下掉问题
    临界区保护
    信号量的使用&生产者消费者问题
    空闲线程和钩子函数
    线程的时间片轮询调度
  • 原文地址:https://www.cnblogs.com/mol1995/p/5972860.html
Copyright © 2011-2022 走看看