本文共 1882 字,大约阅读时间需要 6 分钟。
Net中的Func和Action委托是非常有用的工具,广泛应用于处理动态方法调用和支持多种参数类型的操作。以下是对Func和Action的详细介绍和示例:
Func是一个泛型委托,主要用于执行返回值的操作,其支持多种参数类型。Func的形式包括:
Func<T1, T2>:接受一个T1参数并返回T2。Func<T1>:显然,_func_委托也支持接受零参数的情况,不过在实际应用中,通常是那种有返回值的操作。public static string SayHello(){ return "Hello";}static void Main(string[] args){ Func say = SayHello; Console.WriteLine(say()); Console.ReadKey();} 在这个示例中,Func<string>被赋值了一个返回字符串的方法SayHello(), 然后被调用。
Funcsay = m => m + m;Console.WriteLine(say("abc")); // 输出abcabc
这个例子中,Lambda函数接受一个字符串参数,并将其复制返回。
最常见的用途之一是Linq中的扩展方法。例如,System.Linq中的Sum方法接受一个Func<TSource, TResult>,这样它就可以在枚举集合上执行自定义的转换函数。
Action是处理没有返回值的操作的委托,同样支持多种参数类型。它的形式包括:
Action<T1>Action<T1, T2>Action<T1, T2, T3>Action<T1, T2, T3, T4>private delegate void Say();public static void SayHello(string str){ Console.WriteLine(str);}static void Main(string[] args){ Action say = SayHello; say("abc"); Console.ReadKey();} 这里,Action<string>被赋值了一个无返回值的方法SayHello(), 然后被调用。
public static void NoParam(){ DelLambda delLambda = () => { return "1"; }; Console.WriteLine("没有参数 返回值:{0}", delLambda());} 这是一个没有参数的委托,可以用于无条件执行操作。
public static void TwoParam(){ DelLambdaTwo delLambdaTwo = (p1, p2) => { return p1 * p2; }; Console.WriteLine("{0}*{1}={2}", 10, 2, delLambdaTwo(10, 2));} 这个例子中,Lambda函数接受两个参数,并将它们相乘返回。
在Net代码中,常见的Func或Action的实现可以通过泛型指令来执行:
Action(() => { /* 操作 */ });Func (() => { /* 操作 */ }); Action和Func的使用可以大幅简化代码编写,特别是在对多个操作进行动态调用时。
Func和Action为开发者提供了便捷的方法来处理各种类型的操作,无论是需要返回值还是无返回值,多参数还是零参数。选择使用哪一个取决于操作的需求:Func用于有返回值的操作,Action用于无返回值的操作。掌握这些工具能够使代码更加简洁和灵活。在实际应用中,尤其是涉及到Linq或其他扩展方法时,理解Func和Action的作用显得尤为重要。
转载地址:http://dsjmz.baihongyu.com/