泛型集合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 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);
{
//定義一個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表達式
{
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();
}
}
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