关闭

C#利用lambda在函数中创建内部函数

发表于:2013-8-12 10:02

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:_如_意_    来源:51Testing软件测试网采编

  有使用过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的类型可以灵活的定义,可以极大的简化大码,提高重用率。

《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号