Func 和 Action 委托

有了泛型委托,就有了一能适用于任何返回类型和任意参数(类型和合理的个数)的通用委托,Func 和 Action。如下所示(下面的in表示参数,out表示返回结果):

delegate TResult Func <out TResult> ();delegate TResult Func <in T, out TResult> (T arg);delegate TResult Func <in T1, in T2, out TResult> (T1 arg1, T2 arg2);
//一直到 T16
delegate void Action ();delegate void Action <in T> (T arg);delegate void Action <in T1, in T2> (T1 arg1, T2 arg2);
//一直到 T16

有了这样的通用委托,我们上面的Calculator泛型委托就可以删掉了,示例就可以更简洁了:

public static void Calculate<T>(T[] values, Func<T,T> c) {
    for (int i = 0; i < values.Length; i++)
        values[i] = c(values[i]);
}

Func 和 Action 委托,除了ref参数和out参数,基本上能适用于任何泛型委托的场景,非常好用。

原文地址:https://www.cnblogs.com/XiaoRuLiang/p/12422917.html

时间: 2024-10-10 03:18:27

Func 和 Action 委托的相关文章

Func与Action

Func与Action C#委托的介绍(delegate.Action.Func.predicate) Func和Action委托的区别和简单使用

.NET : Func委托和Action委托

上一篇我们讲到了如何在ASP.NET页面中实现异步任务.我们来回顾一下里面一个特殊的类型:LongTimeTask public class LongTimeTask{    public string Result = string.Empty;    public HelloWorldHandler handler; public delegate string HelloWorldHandler();    public string HelloWorld()    {        Th

C#中常见的委托(Func委托、Action委托、Predicate委托)

今天我要说的是C#中的三种委托方式:Func委托,Action委托,Predicate委托以及这三种委托的常见使用场景. Func,Action,Predicate全面解析 首先来说明Func委托,通过MSDN我们可以了解到,Func委托有如下的5种类型: (1) *delegate TResult Func<TResult>(); (2)*delegate TResult Func<T1,TResult>(T1 arg1); (3) *delegate TResult Func&

Func 委托 和 Action 委托 初步谈论

继上篇EventHandler之后,继续填坑,简单了解下Func<TResult> 委托 和 Action 委托. msdn对于两者的解释: Func<TResult>:封装一个不具有参数但却返回 TResult 参数指定的类型值的方法. Action:封装一个方法,该方法不具有参数并且不返回值. 两者的区别在于:有无返回值. 至于 Func<T,TResult>.Func<T1,T2,TResult>.... Action<T>.Action&

.Net——Func&lt;&gt;与Action&lt;&gt;

首先来先写几个测试函数: <span style="font-size:14px;"> public delegate void SayHello(string strName); public static void Hello(string strName) { Console.WriteLine(strName + " ,hello"); } public static void SayGoodNight(string strName) { Con

通过IL分析C#中的委托、事件、Func、Action、Predicate之间的区别与联系

一直以来都是对于事件与委托比较混淆,而且不太会用.找了个时间,总结了一下,感觉清晰了很多. 先说一下个人理解的结论吧: delegate是C#中的一种类型,它实际上是一个能够持有对某个方法的引用的类. delegate声明的变量与delegate声明的事件,并没有本质的区别,事件是在delegate声明变量的基础上包装而成的,类似于变量与属性的关系(在IL代码中可以看到每一个delegate声明的事件都对应是私有的delegate声明的变量),提升了安全性. Action 与Func:这两个其实

C#中Func与Action的理解

Action 与 Func是.NET类库中增加的内置委托,以便更加简洁方便的使用委托.最初使用委托时,均需要先定义委托类型,然后定义一个符合委托类型签名的函数,在调用前,需声明并创建委托对象,将指定函数与委托进行关联.如例1:public delegate int Math(int param1,int param2);定义委托类型Public int Add(int param1,int param2)//定义同签名函数{ Return param1+param2;}Math math;//声

func 和 actin 委托的区别

一.[action<>]指定那些只有输入参数,没有返回值的委托 1.1定义一个委托: 比如,我们原来写委托: public delegate void myDelegate(string str); 这个委托表示,它只能委托那些只有一个输入值而没有返回值的方法,比如下面的这个方法. 1.2定义方法 public static void HellowChinese(string strChinese) { Console.WriteLine("早上好," + strChine

[C#基础]Func和Action学习

目录 委托 Action Func 总结 委托 委托的那些事 关于委托的基本定义,在很久之前的这篇文章中,有个简单的介绍.稍微回顾一下. 委托是c#中类型安全的,可以订阅一个或多个具有相同签名方法的函数指针 声明委托的方式:delegate 返回值类型 委托类型名(参数) 例如: 1 delegate void Say(string strContent); 如果想使用该委托,需要一个对应的方法. 1 /// <summary> 2 /// 委托对应方法 3 /// </summary&