List .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

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM