博客
关于我
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/

你可能感兴趣的文章
OpenObserve云原生可观测平台本地Docker部署与远程访问实战教程
查看>>
OpenPPL PPQ量化(4):计算图的切分和调度 源码剖析
查看>>
OpenPPL PPQ量化(5):执行引擎 源码剖析
查看>>
openpyxl 模块的使用
查看>>
Openresty框架入门详解
查看>>
OpenResty(1):openresty介绍
查看>>
OpenResty(2):OpenResty开发环境搭建
查看>>
openshift搭建Istio企业级实战
查看>>
Openstack 之 网络设置静态IP地址
查看>>
OpenStack 综合服务详解
查看>>
OpenStack 网络服务Neutron详解
查看>>
Openstack(两控制节点+四计算节点)-1
查看>>
openstack--memecache
查看>>
openstack-keystone安装权限报错问题
查看>>
openstack【Kilo】汇总:包括20英文文档、各个组件新增功能及Kilo版部署
查看>>
openstack下service和endpoint
查看>>
Openstack企业级云计算实战第二、三期培训即将开始
查看>>
OpenStack创建虚拟机实例实战
查看>>
OpenStack安装部署实战
查看>>
OpenStack实践系列⑨云硬盘服务Cinder
查看>>