淺談對Lambda表達(dá)式的理解
在.NET 1.0的時(shí)候,大家都知道我們經(jīng)常用到的是委托。有了委托呢,我們就可以像傳遞變量一樣的傳遞方法。在一定程序上來講,委托是一種強(qiáng)類型的托管的方法指 針,曾經(jīng)也一時(shí)被我們用的那叫一個(gè)廣泛呀,但是總的來說委托使用起來還是有一些繁瑣。來看看使用一個(gè)委托一共要以下幾個(gè)步驟:
用delegate關(guān)鍵字創(chuàng)建一個(gè)委托,包括聲明返回值和參數(shù)類型
使用的地方接收這個(gè)委托
創(chuàng)建這個(gè)委托的實(shí)例并指定一個(gè)返回值和參數(shù)類型匹配的方法傳遞過去
好啦,我承認(rèn)啦上面是自己在網(wǎng)上看到的,但是它很好的介紹了委托,在以前要使用委托的話,就必須要進(jìn)過上面的3個(gè)不步奏,在我看來真的覺得是挺繁雜的,所以主題來了Lambda表達(dá)式,它可以通過匿名的方法來繞過步奏2,所以我只需要定義一個(gè)委托后,再使用Lambda表達(dá)式來實(shí)現(xiàn)委托,下面寫一個(gè)小小的例子看看吧:
// 編譯器不知道后面到底是什么玩意,所以我們這里不能用var關(guān)鍵字
Action dummyLambda = () => { Console.WriteLine("Hello World from a Lambda expression!"); }; // double y = square(25); Func<double, double> square = x => x * x; // double z = product(9, 5); Func<double, double, double> product = (x, y) => x * y; // printProduct(9, 5); Action<double, double> printProduct = (x, y) => { Console.WriteLine(x * y); }; // var sum = dotProduct(new double[] { 1, 2, 3 }, new double[] { 4, 5, 6 }); Func<double[], double[], double> dotProduct = (x, y) => { var dim = Math.Min(x.Length, y.Length); var sum = 0.0; for (var i = 0; i != dim; i++) sum += x[i] + y[i]; return sum; }; // var result = matrixVectorProductAsync(...); Func<double, double, Task<double>> matrixVectorProductAsync = async (x, y) => { var sum = 0.0; /* do some stuff using await ... */ return sum; };
從上面的代碼中我們可以看出:
如果只有一個(gè)參數(shù),不需要寫()
如果只有一條執(zhí)行語句,并且我們要返回它,就不需要{},并且不用寫return
Lambda可以異步執(zhí)行,只要在前面加上async關(guān)鍵字即可
Var關(guān)鍵字在大多數(shù)情況下都不能使用
以上所述就是本文的全部內(nèi)容了,希望大家能夠喜歡。
相關(guān)文章
Asp.Net 網(wǎng)站性能優(yōu)化之緩字決 (上) 緩沖寫數(shù)據(jù)
通常情況下Asp.Net 網(wǎng)站的底層數(shù)據(jù)存儲(chǔ)都是關(guān)系數(shù)據(jù)庫,關(guān)系數(shù)據(jù)庫資源比較昂貴,而且也很容易造成瓶頸。緩字決文章就是為大家介紹如何有效使用緩存,異步寫緩沖數(shù)據(jù)庫的壓力,從而保證網(wǎng)站的性能。2010-06-06SignalR Self Host+MVC等多端消息推送服務(wù)(三)
這篇文章主要為大家詳細(xì)介紹了SignalR Self Host+MVC等多端消息推送服務(wù)的第三篇,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06.NET?Core(.NET6)中g(shù)RPC使用實(shí)踐
gRPC是高性能的遠(yuǎn)程過程調(diào)用(RPC)框架,本文主要介紹了.NET?Core(.NET6)中g(shù)RPC使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-04-04強(qiáng)烈推薦一個(gè)基于.Net Framework開發(fā)的Windows右鍵菜單管理工具
這篇文章主要介紹了推薦一個(gè)基于.Net Framework開發(fā)的Windows右鍵菜單管理工具,今天給大家推薦一個(gè)Windows右鍵菜單管理工具,方便我們管理我們的右鍵菜單,需要的朋友可以參考下2023-05-05ASP.NET MVC 中實(shí)現(xiàn)基于角色的權(quán)限控制的處理方法
在ASP.NET MVC中,通過使用其所提供的內(nèi)置2013-03-03ASP.NET The system cannot find the file specified解決辦法
這篇文章主要介紹了ASP.NET The system cannot find the file specified解決辦法的相關(guān)資料,需要的朋友可以參考下2016-11-11.net 運(yùn)用二進(jìn)制位運(yùn)算進(jìn)行數(shù)據(jù)庫權(quán)限管理
.net 運(yùn)用二進(jìn)制位運(yùn)算進(jìn)行數(shù)據(jù)庫權(quán)限管理 ,需要的朋友可以參考一下2013-02-02.NET 與樹莓派WS28XX 燈帶的顏色漸變動(dòng)畫效果的實(shí)現(xiàn)
所謂顏色漸變動(dòng)畫,首先,你要確定兩種顏色——起始色和最終色,比如從綠色變成紅色,綠色是起始,紅色是終點(diǎn)。這篇文章主要介紹了.NET 與樹莓派WS28XX 燈帶的顏色漸變動(dòng)畫,需要的朋友可以參考下2021-12-12