Predicate<T>泛型委托用来定义一组条件并确定指定对象是否符合这些条件的方法,其语如下:
Public delegate bool Predicate<T>(T obj)
参数说明:
T:要比较的对象类型
Obj:要按照由此委托表示的方法中定义的条件进行比较的对象。
返回值:如果符合此委托表示的方法中定义的条件,则为true,否则为false
Action<T>泛型委托用来封装一个方法,该方法只采用一个参数并且不返回值,其语法如下:public delegate void Action<T> (T obj)
参数说明
T:委托封装的方法的参数类型。
Obj:委托封装的方法的参数
Func<T>泛型委托封装一个具有一个参数并返回 TResult 参数指定的类型值的方法。,其语法格式如下:
public delegate TResult Func<T, TResult>(T arg);
T:此委托封装的方法的参数类型。
TResult: 此委托封装的方法的返回值类型。
返回结果: 此委托封装的方法的返回值。例1:查找指定的字符串。
//声明一个数组并初始化
string[] strLists = new string[] { "明日科技", "C#编程词典", "C#范例大全" };
Console.WriteLine("源字符串数组:");
//使用foreach语句遍历输出
foreach (string str in strLists)
{
Console.Write(str + " ");
}
Console.WriteLine("\n");
// 第一种写法 使用Lambda表达式查找数组中包含“C#”的字符串
string[] strList = Array.FindAll(strLists, s => (s.IndexOf("C#") >= 0));
//第二种写法 使用匿名方法的方式
string[] strList = Array.FindAll(strLists, (s) => { return s.IndexOf("C#") >= 0; });
Console.WriteLine("查找到的包含“C#”的字符串:");
//使用foreach语句遍历输出
foreach (string str in strList)
{
Console.Write(str + " ");
}
输出结果:
源字符串数组:
明日科技 C#编程词典 C#范例大全
查找到的包含“C#”的字符串:
C#编程词典 C#范例大全
例2:Lambda表达式查找List列表,使用Predicate委托查找年龄大于30的员工。
class Program
{
static void Main(string[] args)
{
new Program().PredicateDelegate();//调用自定义方法显示信息
}
public void PredicateDelegate()
{
List<User> P_List_user = new List<User>();//创建泛型集合
//为泛型集合赋值
P_List_user.Add(new User() { Name = "小刘", Age = 33, Pay = 5000 });
P_List_user.Add(new User() { Name = "小王", Age = 30, Pay = 5000 });
P_List_user.Add(new User() { Name = "小赵", Age = 32, Pay = 5000 });
P_List_user.Add(new User() { Name = "小吕", Age = 30, Pay = 5000 });
P_List_user.Add(new User() { Name = "小房", Age = 31, Pay = 5000 });
string P_Str = string.Empty;//定义一个字符串变量,用来记录输出信息
//第一种实现方式:匿名方法
List<User> P_List_temp = P_List_user.FindAll(//在泛型集合中查找
(pp) =>//定义匿名方法
{
return pp.Age > 30;//指定查找条件
});
//第二种实现方式:Lambda表达式,Predicate委托实现
List<User> P_List_temp = P_List_user.FindAll(pp => pp.Age > 30);
//第一种实现方式:定义匿名方法
P_List_temp.ForEach(//遍历查询结果
(pp) => {
//记录查找到的信息
P_Str += "姓名:" + pp.Name + " 年龄:" +pp.Age.ToString() + Environment.NewLine;
});
//第二种方式:Lambda表达式
P_List_temp.ForEach(pp=>Console.WriteLine(pp.Name));
Console.WriteLine(P_Str);//输出信息
Console.ReadLine();
}
class User
{
public string Name { get; set; }//自动实现名称属性
public int Age { get; set; }//自动实现年龄属性
public double Pay { get; set; }//自动实现薪资属性
public override string ToString()
{
return string.Format(
同理计算员工工资的总和:
Double pay=P_List_user.Sum((pp)=>{return pp.Pay;});
"姓名:{0} 年龄:{1} 工资:{2}", Name, Age, Pay);//对信息进行格式化
}
}
}