.NET Action 与 Func
Action 与 Func是.NET类库中增加的内置委托,以便更加简洁方便的使用委托
内置委托类型,顾名思义Action和Func本身就是已经定义好的委托类型。两种委托类型的区别在于:Action委托签名不提供返回类型,而Func提供返回类型。
Action委托具有Action、Action<T1,T2>、Action<T1,T2,T3>……Action<T1,……T16>多达16个的重载,其中传入参数均采用泛型中的类型参数T,涵盖了几乎所有可能存在的无返回值的委托类型。
Func则具有Func、Func<T,Tresult>、Func<T1,T2,T3……,Tresult>17种类型重载,T1……T16为出入参数,Tresult为返回类型。
var ts = new TimeSpan(0, 0, 100); Func<string, string, string> demo1 = (a, b) => { return string.Concat(a, b); }; var t1 = demo1("123", "456"); Func<int, int, int> demo2 = (param1, param2) => { return param1 + param2; }; var t2 = demo2(123, 456); //既然是委托类型,也同样可以与匿名函数、或者采用Lambda表达式结合使用: //匿名函数: Func<int, int, int> math1 = delegate (int param1, int param2) { return param1 + param2; }; //Lambda: Func<int, int, int> math2 = (param1, param2) => { return param1 + param2; }; //Action的使用如同上面Func的使用一样,只是缺少了返回类型,直接调用委托函数。 Action<int, int> math = (int param1, int param2) => { Console.WriteLine((param1 + param2).ToString()); }; math(3, 4); //C#的Lambda 表达式都使用 Lambda 运算符 =>,该运算符读为“goes to”。 函数体多于一条语句的可用大括号括起。 var temp = string.Empty; Action<string> actionDelegate = (x) => { temp = x; };