zoukankan      html  css  js  c++  java
  • C#利用lambda在函数中创建内部函数

    有使用过JS的朋友,相信都知道function。JS中的function是可以在里面在定义一个作为内部使用的。有时为了控制作用域,或者这种小函数只在这个函数体内会使用,所以就不希望在外部在作额外的定义。那C#中有没有这样类似的方式呢?答案是有的。


    在C#中要实现,需要用到的是委托和lambda表达式。对于lambda表达式,是可以实现匿名函数定义和挂接委托事件的。具体的可参见该文C#利用lambda实现委托事件的挂接

    要实现函数内创建内部函数,至少有两种方式可以用。

    第一种:Func<>.

    第二种:Action<>


    Func和Action本质上都是委托,所不同的是Func可以输出返回值,而Action是没有返回值。下面给出实现的代码。

     private void outputInfo(string info)
            {
                Func<int,string, string> format = (count,message) =>
                {
                    return message + " count:" + count.ToString();
                };
    
                Action<string> showMessage = (message) =>
                {
                    Console.WriteLine(message);
                };
    
                string formatInfo = format(1, info);
                showMessage(formatInfo);
            }


    在outputInfo函数中又定义了两个函数format和showMessage。

    其中format的前两个参数是输入参数,第三个参数是输出参数,即返回值。对于Func是必须要有返回值的,所以Func至少也要有一个输出参数(可以在IDE中对Func看看重载)。紧接在format等号后面的是lambda表达式。需要特别注意的是,lambda表达式中的参数是输入参数,而且是与Func所指定的参数类型是一一对应的,也就是说count对应的是Func中的int类型,而message对应的是Func中的string类型,而lambda后在的内容(大括号内的)是具体的实现,其中的return的返回值所对应的类型是Func的最后一个参数类型,即string类型。

    showMessage的参数只有输入参数,没有返回值的。这里只有一个string类型的输入参数。

    在实际运用中时,对于Func和Action的类型可以灵活的定义,可以极大的简化大码,提高重用率。

  • 相关阅读:
    Central Contract无法传到ECC的排查工具
    直接采购在Core SRM与SRM PPS间的区别
    整理一下思路
    PR无法修改的几个原因
    MARCTRAME与MARCHTRAME
    Revision Level在PS中的决定
    Storage Location在物料分配时的选择逻辑
    如何正确删除WBS下的Planned Independent Requirement
    Open XML SDK 2.0
    Silverlight使用问题汇总一
  • 原文地址:https://www.cnblogs.com/pangblog/p/3246564.html
Copyright © 2011-2022 走看看