博客
关于我
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 Panda TIME 系列重新采样
查看>>
python pandas TimeStamps到夏令时的本地时间字符串
查看>>
Python pandas 数据清洗与数据绘图实战
查看>>
Python Pandas 用顶行替换标题
查看>>
Python pandas 通过 dt 访问器有效地将日期时间转换为时间戳
查看>>
Python Pandas-从DataFrame按类别绘制多个条形图
查看>>
Python Pandas:每月或每周拆分 TimeSerie
查看>>
python pandas中融化的对面
查看>>
python pandas从时间序列中提取唯一日期
查看>>
Python PyQt5 将不再显示此消息复选框添加到 QMessageBox
查看>>
Python PyQt5:如何使用 PyQt5 显示错误消息
查看>>
Python PYSFTP-以字符串/文本形式传递私钥,而不是传递文件路径
查看>>
Python pytest 面试题!
查看>>
Python pytz 时区函数返回一个相差 9 分钟的时区
查看>>
python rabbitmq实现简单/持久/广播/组播/topic/rpc消息异步发送可配置Django
查看>>
Python random和json模块
查看>>
Python random模块seed理解
查看>>
python range()函数
查看>>
Python rdflib可传递查询
查看>>
python redis 集群_python 搭建redis集群
查看>>