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

 

posted @ 2013-08-08 20:36  pangbangb  阅读(1729)  评论(0编辑  收藏  举报