一、介绍
1.Func,Action,Predicate都是微软提供的定义好的委托类型,他们都位于System命名空间下,使用这几个委托可以简化代码的编写,比自定义委托使用起来更加方便;
2.Func委托具有返回值,并且可以有0到16个参数;
3.Action委托不具有返回值,可以有0到16个参数;
4.Predicate表示定义一组条件并确定指定对象是否符合这些条件的方法,他具有一个bool类型的返回值,符合由此委托表示的方法中定义的条件,则为true,否则为false;
二、实例
1.简单的使用
public class Program
{
static void Main(string[] args)
{
while (true)
{
string strReceiveData = Console.ReadLine();
//Action是一个委托,该委托具有0到16个参数,但他不具有返回值,只要满足该委托签名的方法均可以使用该委托
Action<string> action = PrintString;
action(strReceiveData);
//Func是一个委托,该委托具有0到16个参数,并且具有返回值,只要满足该委托签名的方法均可以使用该委托
Func<string, string, string> func = AddString;
string strResult = func(strReceiveData, strReceiveData);
Console.WriteLine("输出:" + strResult);
//Lambda表达式是一个函数,所以可以将他直接赋给委托
Func<int, int, int> funcAdd = (x, y) => x * y;
Console.WriteLine("结果为:" + funcAdd(4, 5));
//Lambda表达式中无参数
Func<int> result=()=> 1;
int i = result();
//Lambda表达式中有一个显式类型的参数
Predicate<int> myPredicate = (int o) => o > 10;
//Lambda表达式中有一个隐式类型的参数,这时参数列表可以不用小括号
Predicate<int> predicate = o => o > 10;
List<int> list=new List<int>();
list.Add(9);
list.Add(20);
List<int> newList = list.FindAll(myPredicate);
}
}
private static void PrintString(string strData)
{
Console.WriteLine("您输入的是:" + strData);
}
private static string AddString(string strArg1, string strArg2)
{
return strArg1 + strArg2;
}
}