List<T>.Find用法学习

摘要:
匹配);设置pre=newPredicate<privatestaticboolMyPredicate(Personp){boolresult=false;

泛型集合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();
        }
    }
运行结果如下:

List&lt;T&gt;.Find用法学习第1张

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

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

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

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

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

免责声明:文章转载自《List&amp;lt;T&amp;gt;.Find用法学习》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇redis 系列16 持久化 RDBiOS转场动画封装下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

nginx+tomcat+java部署总结

昨天部署了一下nginx+tomcat+java出现了很多问题,以下为整理总结。 使用了两种部署方式,一种是源码部署,一种是war部署。 java源码部署总结: 环境:nginx+tomcat 部署方式:源码部署 1 源码目录/chroot2/test/schedule 目录下面就是所有源码了 2 tomcat 位置: /usr/local/tomc...

yii框架中findall方法取数据使用总结,包括select各种条件,where条件,order by条件,limit限制等

在yii框架中可以使用映射类的find方法取出一条数据或者用findall方法取出数条数据来,那么如何按照所需条件来取数据呢,主要用到了CDbCriteria这个类,这个类是yii自带的操作数据库的支持类,可以作为参数传递给find等方法,这里用findall做个例子: 比如我要取出videoinfo表中的'v_id','title','big_class...

SpringBoot整合c3p0、Druid数据库连接池

1、C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展,同时在Hibernate、Spring项目开发中被广泛应用。修改项目的pom.xml配置文件,添加C3P0依赖支持管理,由于要连接mysql,所以也要加入mysql的依赖包,如下所示: 1 <?xml version="1.0" enco...

一个 XSD 实例

一个 XSD 实例 本节会为您演示如何编写一个 XML Schema。您还将学习到编写 schema 的不同方法。 XML 文档 让我们看看这个名为 "shiporder.xml" 的 XML 文档: <?xml version="1.0" encoding="ISO-8859-1"?> <shiporder orderid="88...

easyuitabs(选项卡)

配置好easyui环境 1.笔记: tabs(选项卡) class: //<div style="700px;height:auto"></div> 是否可以关闭:closable:true 选项卡标签的宽度:data-options="tabWidth:200" 下拉菜单: <div id="mm">   <di...

html中删除表格的一行(有弹窗)

html中删除表格一行其实很简单,但是加上一个提示弹窗后,点击确定后却获取不到要删除的是哪一行,下面是一个demo html: <tr> <td> <input type="checkbox" /> </td> <td>安...