C#的Lambda表達(dá)式,如果你第一接觸這個(gè)專(zhuān)業(yè)術(shù)語(yǔ),聽(tīng)這個(gè)名字你完全不知道它是干嘛的。那問(wèn)題就來(lái)了(放心不是去藍(lán)翔學(xué)挖掘機(jī))。
創(chuàng)新互聯(lián)公司是一家專(zhuān)注于網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站制作與策劃設(shè)計(jì),七星網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)公司做網(wǎng)站,專(zhuān)注于網(wǎng)站建設(shè)十年,網(wǎng)設(shè)計(jì)領(lǐng)域的專(zhuān)業(yè)建站公司;建站業(yè)務(wù)涵蓋:七星等地區(qū)。七星做網(wǎng)站價(jià)格咨詢(xún):18980820575它到底是什么呢?
說(shuō)明這個(gè)問(wèn)題需要借助代碼,給予簡(jiǎn)單描述。代碼如下:
public delegate int deleArgu(int x);//委托 //... //... int y = 0; mydeleArgu=x=>{return x*x;};//這就是一個(gè)Lambda表達(dá)式。 y=mydeleArgu(5);//結(jié)果y=25;
由上面所看到的x=>{return x*x};這就是一個(gè)Lambda表達(dá)式,它其實(shí)就是一個(gè)匿名函數(shù)。那接下來(lái)的問(wèn)題就出現(xiàn)了。
2.什么是匿名函數(shù)?
我也是借用幾行代碼說(shuō)明,代碼如下:
public delegate int deleArgu(int x);//委托 mydeleArgu = delegate(int x){return x*x;}; Console.WriteLine(mydeleArgu(5));//輸出為25;
上面的代碼中mydeleArgu = delegate(int x){return x*x;};這就是一個(gè)匿名函數(shù)。這個(gè)事在.Net FrameWork 2.0后加入的概念。在.Net FrameWork 1.0的委托是把指針指向一個(gè)函數(shù),那么名字叫什么,阿貓阿狗都無(wú)所謂了,名字不再重要,所以在這個(gè)地方提供了匿名方法。
3.Lambda表達(dá)式是怎么來(lái)的?
到了后來(lái).Net Framework 3.5之后就更加的改進(jìn)了,如下代碼:
public delegate String deleTransfer(string s); deleTransfer =s=>s.Substring(0,1).toUpper()+s.Substring(1).toLower();//首字母大寫(xiě),其他小寫(xiě) Console.WriteLine(deleTransfer("abdDEF"));//結(jié)果"Adbef"
上面的部分就是帶一個(gè)參數(shù)的Lambda表達(dá)式。是不是感覺(jué)它就是一個(gè)匿名方法?沒(méi)錯(cuò)!它就是這樣的。
我們很快就看清Lambda表達(dá)式的發(fā)展脈絡(luò),它是委托和匿名方法過(guò)渡而來(lái)的,和匿名方法很相似。
總結(jié):(來(lái)自官方文檔)
=> 運(yùn)算符具有與賦值運(yùn)算符 (=) 相同的優(yōu)先級(jí)并且是右結(jié)合運(yùn)算(參見(jiàn)“運(yùn)算符”文章的“結(jié)合性”部分)。
Lambda 在基于方法的 LINQ 查詢(xún)中用作標(biāo)準(zhǔn)查詢(xún)運(yùn)算符方法(如 Where)的參數(shù)。
使用基于方法的語(yǔ)法在 Enumerable 類(lèi)中調(diào)用 Where 方法時(shí)(如在 LINQ to Objects 和 LINQ to XML 中一樣),參數(shù)是委托類(lèi)型 System.Func<T, TResult>。 使用 Lambda 表達(dá)式創(chuàng)建該委托最為方便。 例如,當(dāng)你在 System.Linq.Queryable 類(lèi)中調(diào)用相同的方法時(shí)(如在 LINQ to SQL 中一樣),參數(shù)類(lèi)型為System.Linq.Expressions.Expression<Func>,其中 Func 是最多具有十六個(gè)輸入?yún)?shù)的任何一個(gè) Func 委托。 同樣,Lambda 表達(dá)式只是一種非常簡(jiǎn)潔的構(gòu)造該表達(dá)式目錄樹(shù)的方式。 盡管事實(shí)上通過(guò) Lambda 創(chuàng)建的對(duì)象具有不同的類(lèi)型,但 Lambda 使得 Where 調(diào)用看起來(lái)類(lèi)似。
在上一個(gè)示例中,請(qǐng)注意委托簽名具有一個(gè) int 類(lèi)型的隱式類(lèi)型輸入?yún)?shù),并返回 int。 可以將 Lambda 表達(dá)式轉(zhuǎn)換為該類(lèi)型的委托,因?yàn)樵摫磉_(dá)式也具有一個(gè)輸入?yún)?shù) (x),以及一個(gè)編譯器可隱式轉(zhuǎn)換為 int 類(lèi)型的返回值。(以下幾節(jié)中將對(duì)類(lèi)型推理進(jìn)行詳細(xì)討論。)使用輸入?yún)?shù) 5 調(diào)用委托時(shí),它將返回結(jié)果 25。在 is 或 as 運(yùn)算符的左側(cè)不允許使用 Lambda。適用于匿名方法的所有限制也適用于 Lambda 表達(dá)式
表達(dá)式位于 => 運(yùn)算符右側(cè)的 lambda 表達(dá)式稱(chēng)為“表達(dá)式 lambda”。 表達(dá)式 lambda 廣泛用于表達(dá)式樹(shù)(C# 和 Visual Basic)的構(gòu)造。 表達(dá)式 lambda 會(huì)返回表達(dá)式的結(jié)果,并采用以下基本形式:
(input parameters) => expression;
語(yǔ)句 lambda 與表達(dá)式 lambda 表達(dá)式類(lèi)似,只是語(yǔ)句括在大括號(hào)中:
(input parameters) => {statement;};
更多信息查詢(xún)官方文檔。
創(chuàng)新互聯(lián)www.cdcxhl.cn,專(zhuān)業(yè)提供香港、美國(guó)云服務(wù)器,動(dòng)態(tài)BGP最優(yōu)骨干路由自動(dòng)選擇,持續(xù)穩(wěn)定高效的網(wǎng)絡(luò)助力業(yè)務(wù)部署。公司持有工信部辦法的idc、isp許可證, 機(jī)房獨(dú)有T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確進(jìn)行流量調(diào)度,確保服務(wù)器高可用性。佳節(jié)活動(dòng)現(xiàn)已開(kāi)啟,新人活動(dòng)云服務(wù)器買(mǎi)多久送多久。
本文題目:C#高級(jí)編程之Lambda表達(dá)式-創(chuàng)新互聯(lián)
網(wǎng)頁(yè)路徑:http://jinyejixie.com/article44/jgphe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信公眾號(hào)、域名注冊(cè)、移動(dòng)網(wǎng)站建設(shè)、網(wǎng)站維護(hù)、全網(wǎng)營(yíng)銷(xiāo)推廣、企業(yè)網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容