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

你可能感兴趣的文章
SpringSecurity框架介绍
查看>>
PCI Express学习篇:Power Management(二)
查看>>
pcie握手机制_【博文连载】PCIe扫盲——Ack/Nak 机制详解(一)
查看>>
pcm转wav的方法及代码示例
查看>>
PC史上最悲剧的16次失败
查看>>
PC端恶意代码分析Lab1.1-5.1,从零基础到精通,收藏这篇就够了!
查看>>
PC端稳定性测试探索
查看>>
PC端编辑 但能在PC端模拟移动端预览的富文本编辑器
查看>>
PDB文件:每个开发人员都必须知道的
查看>>
springMVC学习(二)
查看>>
Pdfkit页眉和页脚
查看>>
PDF中的Pandoc语法突出显示不起作用
查看>>
pdf从结构新建书签_在PDF文件中怎样创建书签
查看>>
pdf做成翻页电子书_第一弹:常见BOOX电子书阅读器问题解答,这些技能你都会吗?...
查看>>
PDF工具箱-分割提取合并
查看>>
pdf打印骑缝章
查看>>
PDF文字识/编辑?这个工具真的很强大!
查看>>
pdf文档出现乱码如何修改
查看>>
pdf根据模板导出
查看>>
PDF调出本来存在的书签面板
查看>>