• List<T>.Find用法学习


    泛型集合List<T>中的Find函数用于查找集合中符合指定条件的元素..相比foreach遍历元素,用Find函数查找,代码更简洁.

    函数原型如下:

    public T Find(Predicate<T> match);

    其中Predicate为C#定义好的委托,原型如下:

    public delegate bool Predicate<in T>(T obj);

    所以,List.Find函数的参数,就是一个 返回值为bool,入参为T类型的函数.当然,可以是命名函数也可以是匿名函数或Lambda表达式..

    示例如下:

    //定义一个Person类

    class Person

        {
            public string Name { get; set; }
            public int Age { get; set; }
            public string Gender { get; set; }
        }
     
    class Program
        {
            //定义一个Predicate类型的委托变量
            private static Predicate<Person> pre = new Predicate<Person>(MyPredicate);
            private static bool MyPredicate(Person p)
            {
                bool result = false;
                if (p.Name == "张三")
                    result = true;
                return result;
            }
            static void Main(string[] args)
            {
                try
                {
                     List<Person> lstPerson = new List<Person>()
                    {
                    new Person { Name = "张三", Age = 10, Gender = "M" },
                    new Person { Name = "李四", Age = 11, Gender = "M" },
                    new Person { Name = "王五", Age = 12, Gender = "M" },
                    new Person { Name = "赵六", Age = 13, Gender = "M" },
                    new Person { Name = "张三", Age = 33, Gender = "F" }
                    };

                    Person p1 = lstPerson.Find(pre);//1、命名函数
                    Person p2 = lstPerson.Find(delegate (Person s) { return s.Name.Equals("王五"); });//2、匿名函数
                    Person p3 = lstPerson.Find(s => { return s.Name.Equals("赵六"); });//3、Lambda表达式
                  Person p4 = lstPerson.Find(s => s.Name.Equals("赵六"));//4、Lambda表达式的简洁写法
                    Console.WriteLine($"姓名:{p1.Name},年龄:{p1.Age}性别:{p1.Gender}");
                    Console.WriteLine($"姓名:{p2.Name},年龄:{p2.Age}性别:{p2.Gender}");
                    Console.WriteLine($"姓名:{p3.Name},年龄:{p3.Age}性别:{p3.Gender}");
                }
                catch (Exception ea)
                {
                    Console.WriteLine($"异常:{ea.Message}");
                }
                Console.ReadKey();
            }
        }
    运行结果如下:

    PS:List<T>.Find 返回的是符合条件的一个元素.若没有,则返回T类型的默认值

            List<T>.FindLast  返回符合条件最后一个元素.若没有,则返回T类型的默认值

            List<T>.FindAll 返回符合条件的元素集合,即List<T>的子集.

            List<T>.FindIndex 返回符合条件的第一个元素的下标.下标从0开始.. 若没有,则返回-1

            List<T>.FindLastIndex 返回符合条件的最后一个元素的下标.下标从0开始.. 若没有,则返回-1

  • 相关阅读:
    教准备租房的同学如何避开坑!
    mvc3中controler和view之间的数据传递
    WebMail发送邮件
    mvc Razor视图语法与Aspx视图语法对比
    SQL Server sql分页查询
    WCF之一
    C++总结笔记(一)抽象、多态、继承
    Perl脚本学习经验(二)常用命令举例
    makefile学习经验(四)编译生成动态库文件(方式二)
    makefile学习经验(三)编译生成动态库文件(方式一)
  • 原文地址:https://www.cnblogs.com/lylongs/p/9650465.html
Copyright © 2020-2023  润新知