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的類型可以靈活的定義,可以極大的簡化大碼,提高重用率。
?
轉載于:https://www.cnblogs.com/pangblog/p/3246564.html
總結
以上是生活随笔為你收集整理的C#利用lambda在函数中创建内部函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 检查肾功能大概需要多少钱
- 下一篇: 博美大概多少钱一只?