博客
关于我
Func<T>、Action<T> 的区别于说明
阅读量:655 次
发布时间:2019-03-15

本文共 1882 字,大约阅读时间需要 6 分钟。

Net中的Func和Action委托是非常有用的工具,广泛应用于处理动态方法调用和支持多种参数类型的操作。以下是对Func和Action的详细介绍和示例:

Func委托

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(), 然后被调用。

Lambda式调用

Func
say = m => m + m;Console.WriteLine(say("abc")); // 输出abcabc

这个例子中,Lambda函数接受一个字符串参数,并将其复制返回。

常见用途

最常见的用途之一是Linq中的扩展方法。例如,System.Linq中的Sum方法接受一个Func<TSource, TResult>,这样它就可以在枚举集合上执行自定义的转换函数。

Action委托

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(), 然后被调用。

Func和Action的区别

  • 返回类型:Func(delegate)可以传递返回类型,因此它适合处理有返回值的操作。
  • 参数类型:Action(delegate)只支持参数类型,不能传递返回值。
  • 执行方式:Func委托的实例需要调用(). invoke()方法,而Action委托则调用().Invoke()。

Lambda式

A:没有参数

public static void NoParam(){    DelLambda delLambda = () => { return "1"; };    Console.WriteLine("没有参数 返回值:{0}", delLambda());}

这是一个没有参数的委托,可以用于无条件执行操作。

B: 有参数

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/

你可能感兴趣的文章
Python:假与 0
查看>>
Python:函数使用
查看>>
Python:函数进阶
查看>>
Python:在整数的二进制表示中查找最长的二进制间隙
查看>>
Python:如何从二进制转换为 base 64 并返回?
查看>>
Python:如何以非阻塞方式读取子进程的标准输出
查看>>
Python:如何使用 plotly 制作阴影区域或交替背景颜色?
查看>>
Python:如何根据日期时间获取值的计数
查看>>
python:如何检测串行 COM 上的设备名称/ID
查看>>
Python:如何模拟 datetime.utcnow()?
查看>>
Python:如果DataFrames之间的其他值匹配,则对DataFrame中的值求和
查看>>
Python:字典思维
查看>>
Python:将 HEX 字符串转换为字节
查看>>
Python:将列表与范围列表合并
查看>>
Python:将列表列表初始化为一定大小,
查看>>
Python:带有生成器的给定集合的幂集
查看>>
Python:按字符的位置拆分字符串
查看>>
Python:替换嵌套字典中的值
查看>>
Python:爬取数据出现response.status_code为403解决方法
查看>>
Python:爬取数据出现response.status_code为418解决方法
查看>>