C#利用lambda在函数中创建内部函数
有使用過JS的朋友,相信都知道function。JS中的function是可以在里面在定義一個作為內(nèi)部使用的。有時為了控制作用域,或者這種小函數(shù)只在這個函數(shù)體內(nèi)會使用,所以就不希望在外部在作額外的定義。那C#中有沒有這樣類似的方式呢?答案是有的。
在C#中要實現(xiàn),需要用到的是委托和lambda表達式。對于lambda表達式,是可以實現(xiàn)匿名函數(shù)定義和掛接委托事件的。具體的可參見該文C#利用lambda實現(xiàn)委托事件的掛接。
要實現(xiàn)函數(shù)內(nèi)創(chuàng)建內(nèi)部函數(shù),至少有兩種方式可以用。
第一種:Func<>.
第二種:Action<>
Func和Action本質(zhì)上都是委托,所不同的是Func可以輸出返回值,而Action是沒有返回值。下面給出實現(xiàn)的代碼。
?
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函數(shù)中又定義了兩個函數(shù)format和showMessage。
?
其中format的前兩個參數(shù)是輸入?yún)?shù),第三個參數(shù)是輸出參數(shù),即返回值。對于Func是必須要有返回值的,所以Func至少也要有一個輸出參數(shù)(可以在IDE中對Func看看重載)。緊接在format等號后面的是lambda表達式。需要特別注意的是,lambda表達式中的參數(shù)是輸入?yún)?shù),而且是與Func所指定的參數(shù)類型是一一對應(yīng)的,也就是說count對應(yīng)的是Func中的int類型,而message對應(yīng)的是Func中的string類型,而lambda后在的內(nèi)容(大括號內(nèi)的)是具體的實現(xiàn),其中的return的返回值所對應(yīng)的類型是Func的最后一個參數(shù)類型,即string類型。
showMessage的參數(shù)只有輸入?yún)?shù),沒有返回值的。這里只有一個string類型的輸入?yún)?shù)。
在實際運用中時,對于Func和Action的類型可以靈活的定義,可以極大的簡化大碼,提高重用率。
?
轉(zhuǎn)載于:https://www.cnblogs.com/pangblog/p/3246564.html
總結(jié)
以上是生活随笔為你收集整理的C#利用lambda在函数中创建内部函数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 检查肾功能大概需要多少钱
- 下一篇: Linux系统配置VI或VIM的技巧