.Net——Func<>与Action<>

首先来先写几个测试函数:

<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) {

                Console.WriteLine(strName + ",goodnight");

            }

            public static string HelloMM(string strName) {

                return strName + ",hello";
            }</span>

为了好理解,先来看delegage调用:

#region 使用delegate调用
                    //SayHello sayHello = new SayHello(Hello);
                    //sayHello("lhc");
 #endregion

接着是func和action:

    #region 使用action
                    //Action<string> action = Hello;
                    //action("lhc");

                    string strName = "lhc";
                    Action<string> action;
                    if (strName == "lhc")
                    {
                        //action = delegate(string strname)
                        //{
                        //    Console.WriteLine(strname + ",hello");
                        //};

                        //action = a => Console.WriteLine(a+",hello");

                        action = Hello;//传入方法

                    }
                    else
                    {
                        //action = a => Console.WriteLine(a+",goodnight");
                        action = SayGoodNight;
                    }
                    action("lhc");

        #endregion

        #region func调用
                    //Func<string, string> funHello = HelloMM;
                    //Console.WriteLine(funHello("lhc"));

        #endregion
              

F12下,看下函数原型:

// 摘要:
    //     封装一个方法,该方法只有一个参数并且不返回值。
    //
    // 参数:
    //   obj:
    //     此委托封装的方法的参数。
    //
    // 类型参数:
    //   T:
    //     此委托封装的方法的参数类型。
    public delegate void Action<in T>(T obj);

对于Action,是没有返回值的。

而对于func:

 // 摘要:
    //     封装一个具有一个参数并返回 TResult 参数指定的类型值的方法。
    //
    // 参数:
    //   arg:
    //     此委托封装的方法的参数。
    //
    // 类型参数:
    //   T:
    //     此委托封装的方法的参数类型。
    //
    //   TResult:
    //     此委托封装的方法的返回值类型。
    //
    // 返回结果:
    //     此委托封装的方法的返回值。
    [TypeForwardedFrom("System.Core, Version=3.5.0.0, Culture=Neutral, PublicKeyToken=b77a5c561934e089")]
    public delegate TResult Func<in T, out TResult>(T arg);

无论<>里面传入多少个泛型,最后都会跟着一个TResult作为函数的返回值。

时间: 2024-12-20 13:46:07

.Net——Func<>与Action<>的相关文章

Func与Action

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

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

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

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 ar

什么是LambdaExpression,如何转换成Func或Action(2)

序言 在上一篇中,我们认识了什么是表达式树.什么是委托,以及它们的关系.可能是我功力不好,貌似大家都不怎么关注,没有讲解出不同角度的问题. 学习一种新技术,是枯燥的过程,只有在你掌握后并能运用时才能从它身上得到乐趣. 做程序开发是一群很奇怪的人群,我们居然可以通过密密麻麻的英文字符加上标点符号从中找到乐趣,确实很奇怪. 考虑到大家接触新技术需要一个过程: 其实对于很多人来说已经不是新技术了,不过您会耐心看本篇后续的文章,说明您可能对这一项技术运用的并不是很熟练 所以我不打算一上来,就放一大堆代码

Func&lt;T&gt;,Action&lt;T&gt;,Predicate&lt;T&gt;使用小结

一.基本知识1.这三个都是.Net内置的泛型委托,方便我们直接使用,而不需要在使用委托时还要做如下定义 public delegate string GetName(string bookId); 2.Func<T>是有返回值的泛型委托,格式为Func<T1,T2,T..N,TResult>,T1,T2,T..N为多个参数,TResult为返回值 3.Ation<T>是没有返回值的泛型委托,格式为Action<T1,T2,T..N>,T1,T2,T..N为多

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;//声

[C#基础]Func和Action学习

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

Func以及Action

Func是一种委托,这是在3.5里面新增的,2.0里面我们使用委托是用Delegate,Func位于System.Core命名空间下,使用委托可以提升效率,例如在反射中使用就可以弥补反射所损失的性能. Action<T>和Func<T,TResult>的功能是一样的,只是Action<T>没有返类型, Func<T,T,Result>:有参数,有返回类型Action,则既没有返回也没有参数, Func<T,TResult> 的表现形式分为以下几种

委托代码func和Action的基本用法

这是微软简化后的委托写法,其中,func适合带返回参数的方法调用,action适合没有返回参数的方法调用 FUNC方法代码: public string GetPeopleInfo(string name, int age) { return $"姓名:{name},年龄:{age}"; } FUNC调用代码:,func的最后一个参数是返回类型,如果是无参的方法调用,那么尖括号只写返回值的类型即可 Func<string, int, string> fuc = new Fu