C#中Lambda表達(dá)式的示例分析

這篇文章給大家分享的是有關(guān)C#中Lambda表達(dá)式的示例分析的內(nèi)容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧。

相山網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián)公司,相山網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為相山成百上千提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)營(yíng)銷(xiāo)網(wǎng)站建設(shè)要多少錢(qián),請(qǐng)找那個(gè)售后服務(wù)好的相山做網(wǎng)站的公司定做!

在C#的語(yǔ)法中有一種比較特殊的寫(xiě)法,叫做Lambda表達(dá)式,這種表達(dá)式的寫(xiě)法在于你查詢數(shù)據(jù)的時(shí)候直接是使用以下箭頭的形式來(lái)表示查詢語(yǔ)句的:=>。例如,我們要查找學(xué)生的List<Student>集合中班級(jí)編號(hào)為1001的所有學(xué)生數(shù)據(jù),我們即可用Studentlist.Where(t=>t.ClassCode=‘1001’)語(yǔ)句來(lái)直接完成,無(wú)需再寫(xiě)繁瑣的foreach語(yǔ)句或者for循環(huán)。Lambda表達(dá)式的運(yùn)算符即為=>。

一、Lambda表達(dá)式定義

Lambda表達(dá)式實(shí)際上是一種匿名函數(shù),在Lambda表達(dá)式中可以包含語(yǔ)句以及運(yùn)算等操作。并且可用于創(chuàng)建委托或表達(dá)式目錄樹(shù)類(lèi)型,支持帶有可綁定到委托或表達(dá)式樹(shù)的輸入?yún)?shù)的內(nèi)聯(lián)表達(dá)式。使用Lambda表達(dá)式可大大減少代碼量,使得代碼更加的優(yōu)美、簡(jiǎn)潔,更有可觀性。

二、Lambda表達(dá)式的表現(xiàn)形式

表達(dá)式形式:(Input Param)=>Expression。在表達(dá)式左側(cè)的表示輸入?yún)?shù),右側(cè)的為相應(yīng)的運(yùn)算語(yǔ)句或者判斷語(yǔ)句等,可包含函數(shù)調(diào)用等復(fù)雜方式。運(yùn)算符=>讀作為goes to,例如下面這個(gè)表達(dá)t=>t.ClassCode='1001',多做goes to ClassCode equal 1001。

在上述的表達(dá)式中,僅僅只有當(dāng)參數(shù)只有一個(gè)的時(shí)候,括號(hào)是可選擇的,例如下面這種含有兩個(gè)參數(shù)時(shí)候的情況應(yīng)該是這樣子的寫(xiě)法
(a,b)=>a==b
當(dāng)表達(dá)式中的多個(gè)參數(shù)編譯器無(wú)法自動(dòng)判斷類(lèi)型的時(shí)候,則需要顯式指定類(lèi)型。
(int firstIndex, string str) => str.IndexOf('Hello') > firstIndex

三、下面介紹List集合中的Lambda表達(dá)式的運(yùn)用

在C#的List集合中,我們時(shí)常需要使用到大量的運(yùn)算或者篩選等操作,按常規(guī)的方式無(wú)非就是利用foreach或者for對(duì)List集合進(jìn)行循環(huán)操作,最后運(yùn)算出結(jié)果。此種方法往往需要寫(xiě)多行語(yǔ)句,閱讀性稍微差點(diǎn),當(dāng)然復(fù)雜的情況下編寫(xiě)也費(fèi)時(shí)。博主遇到這種情況一般比較喜歡偷懶,很少會(huì)去直接寫(xiě)循環(huán),而是直接使用Lambda表達(dá)式一條語(yǔ)句完成。

先假定好我們待會(huì)使用的范例的格式:

studentList對(duì)象:此對(duì)象是一個(gè)List集合,集合中的對(duì)象為學(xué)生實(shí)體Student。此集合中存放著整個(gè)學(xué)校學(xué)生的信息。

scoreList對(duì)象:此對(duì)象是個(gè)List集合,集合中的對(duì)象是成績(jī)實(shí)體Score,此集合中存放著為學(xué)生的成績(jī)信息。

Student實(shí)體:此實(shí)體包含下列幾個(gè)屬性,StudentName,StudentCode,ClassCode,ClassName,BirthDay,Grade。以上幾個(gè)英文單詞都比較簡(jiǎn)單,就不做解釋了。

Score實(shí)體:此實(shí)體包含下列幾個(gè)屬性,StudentCode,SubjectName(科目名稱(chēng)),ScoreValue(分?jǐn)?shù),0-100的數(shù)字)。一個(gè)學(xué)生可能有多門(mén)成績(jī)數(shù)據(jù)存放在此。

(1)查詢班級(jí)編號(hào)為1001的班級(jí)下面的所有學(xué)生實(shí)體并返回到list1001中存儲(chǔ)
var list1001=Studentlist.Where(t=>t.ClassCode==‘1001’);
(2)查詢班級(jí)編號(hào)為1001的班級(jí)下面的所有學(xué)生實(shí)體并返回到list1001中存儲(chǔ),并按照學(xué)生的出生日期從小到大排列。
var list1001=Studentlist.Where(t=>t.ClassCode==‘1001’).OrderBy(t=>t.BirthDay);
在此說(shuō)一下,OrderBy是從小到大排序,需要從大到小排列則用OrderByDescending。

(3)查詢班級(jí)編號(hào)為1001的班級(jí)下面的姓氏為【李】的同學(xué)的所有集合,并按照學(xué)生的出生日期從小到大排列。

var list=Studentlist.Where(t=>t.ClassCode==‘1001’&&t.StudentName.StartWith(“李”)).OrderBy(t=>t.BirthDay);
(4)查詢出班級(jí)編號(hào)為1001的班級(jí),并且存在至少一門(mén)考試科目成績(jī)低于60分的所有同學(xué)。

var result = studentList.Where(t => (t.ClassCode == "1001") && (scoreList.Exists(p => p.ScoreValue < 60 && p.StudentCode == t.StudentCode)));
在上述語(yǔ)句中,lambda表達(dá)式中再次嵌入了一個(gè)lambda表達(dá)式。t參數(shù)是studentList中的lambda表達(dá)式參數(shù),代表實(shí)體為student。p參數(shù)為scoreList中的lambda表達(dá)式參數(shù),代表的實(shí)體為score。

(5)其他較常用的Lambda表達(dá)式如下:

var a = studentList.FirstOrDefault(t => t.StudentCode == "10012");//FirstOrDefault返回第一個(gè)符合條件的數(shù)據(jù),不存在的時(shí)候返回Null。
var b = studentList.Count(t => t.StudentName == "李世民");//返回符合條件的實(shí)體個(gè)數(shù)
var c = studentList.FindAll(t => t.StudentName.Contains("中"));//查找所有名字中含有【中】的實(shí)體集合
var d = studentList.GroupBy(t => t.ClassCode);//對(duì)studentList按照ClassCode分組
var f = studentList.Max(t => t.BirthDay);//返回最大的出生日期。
var e = scoreList.Sum(t => t.ScoreValue);//對(duì)所有成績(jī)求和
var g = scoreList.Average(t => t.ScoreValue);//對(duì)所有成績(jī)求平均分
var h = studentList.Select(t => t.StudentName).Distinct();//獲取所有的學(xué)生姓名,并去除重名

Lambda表達(dá)式的總結(jié)大致如此,從上述例子來(lái)看,可以大大簡(jiǎn)化代碼的量,并增加可讀性。

感謝各位的閱讀!關(guān)于“C#中Lambda表達(dá)式的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!

本文名稱(chēng):C#中Lambda表達(dá)式的示例分析
文章位置:http://muchs.cn/article46/pdjdhg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站策劃、品牌網(wǎng)站建設(shè)云服務(wù)器、GoogleChatGPT、營(yíng)銷(xiāo)型網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)