C#利用lambda在函數中建立內建函式

來源:互聯網
上載者:User

有使用過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的類型可以靈活的定義,可以極大的簡化大碼,提高重用率。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.