成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

.NET Lambda表達式的語義:字符串列表范例

開發(fā) 后端
本文通過一個字符串列表范例,介紹了.NET Lambda表達式的語義特征。“語義”是指代碼所表現(xiàn)出來的含義,說的更通俗一些,便是指一段代碼給閱讀者的“感覺”如何。

.NET Lambda表達式的“語義”

Lambda表達式的增強在于“語義”二字。“語義”是指代碼所表現(xiàn)出來的含義,說的更通俗一些,便是指一段代碼給閱讀者的“感覺”如何。為了說明這個例子,我們還是使用示例來說明問題。

這個例子是這樣的:“請寫一個方法,輸入一個表示整型的字符串列表,并返回一個列表,包含其中偶數(shù)的平方,并且需要按照平方后的結(jié)果排序”。很簡單,不是嗎?相信您一定可以一蹴而就:

  1. static List< int> GetSquaresOfPositive(List< string> strList)  
  2. {  
  3.     List< int> intList = new List< int>();  
  4.     foreach (var s in strList) intList.Add(Int32.Parse(s));  
  5.  
  6.     List< int> evenList = new List< int>();  
  7.     foreach (int i in intList)  
  8.     {  
  9.         if (i % 2 == 0) evenList.Add(i);  
  10.     }  
  11.  
  12.     List< int> squareList = new List< int>();  
  13.     foreach (int i in evenList) squareList.Add(i * i);  
  14.  
  15.     squareList.Sort();  
  16.     return squareList;  
  17. }  
  18.  

我想問一下,這段代碼給您的感覺是什么?它給我的感覺是:做了很多事情。有哪些呢?
1. 新建一個整數(shù)列表intList,把參數(shù)strList中所有元素轉(zhuǎn)化為整型保存起來。
2. 新建一個整數(shù)列表evenList,把intList中的偶數(shù)保存起來。
3. 新建一個整數(shù)列表squareList,把evenList中所有數(shù)字的平方保存起來。
4. 將squareList排序。
5. 返回squareList。

您可能會問:“當(dāng)然如此,還能怎么樣?”。事實上,如果使用了Lambda表達式,代碼就簡單多了:

.NET Lambda表達式的語義:寫法范例

  1. static List< int> GetSquaresOfPositiveByLambda(List< string> strList)  
  2. {  
  3.     return strList  
  4.         .Select(s => Int32.Parse(s)) // 轉(zhuǎn)成整數(shù)  
  5.         .Where(i => i % 2 == 0) // 找出所有偶數(shù)  
  6.         .Select(i => i * i) // 算出每個數(shù)的平方  
  7.         .OrderBy(i => i) // 按照元素自身排序  
  8.         .ToList(); // 構(gòu)造一個List  
  9. }  

配合.NET 3.5中定義的擴展方法,這段代碼可謂“一氣呵成”(在實際編碼過程中,老趙更傾向于把這種簡短的“遞進式”代碼寫作一行)。那么這行代碼的“語義”又有什么變化呢?在這里,“語義”的變化在于代碼的關(guān)注點從“怎么做”變成了“做什么”。這就是Lambda表達式的優(yōu)勢。

在第一個方法中,我們構(gòu)造了多個容器,然后做一些轉(zhuǎn)化,過濾,并且向容器填充內(nèi)容。其實這些都是“怎么做”,也就是所謂的“how (to do)”。但是這些代碼并不能直接表示我們想要做的事情,我們想要做的事情其實是“得到XXX”,“篩選出YYY”,而不是“創(chuàng)建容器”,“添加元素”等操作。

在使用Lambda表達式的實現(xiàn)中,代碼變得“聲明式(declarative)”了許多。所謂“聲明式”,便是“聲稱代碼在做什么”,而不像“命令式(imperative)”的代碼在“操作代碼怎么做”。換句話說,“聲明式”關(guān)注的是“做什么”,是指“what (to do)”。上面這段聲明式的代碼,其語義則變成了:
1. 把字符串轉(zhuǎn)化為整數(shù)
2. 篩選出所有偶數(shù)
3. 把每個偶數(shù)平方一下
4. 按照平方結(jié)果自身排序
5. 生成一個列表

至于其中具體是怎么實現(xiàn)的,有沒有構(gòu)造新的容器,又是怎么向容器里添加元素的……這些細節(jié),使用Lambda表達式的代碼一概不會關(guān)心——這又不是我們想要做的事情,為什么要關(guān)心它呢?

雖然擴展方法功不可沒,但我認為,Lambda表達式在這里的重要程度尤勝前者,因為它負責(zé)了最關(guān)鍵的“語義”。試想,“i => i * i”給您的感覺是什么呢?是構(gòu)造了一個委托嗎(當(dāng)然,您一定知道在這里其實構(gòu)造了一個匿名方法)?至少對我來說,它的含義是“把i變成i * i”;同樣,“i => i % 2 == 0”給我的感覺是“(篩選標準為)i模2等于零”,而不是“構(gòu)造一個委托,XXX時返回true,否則返回false”;更有趣的是,OrderBy(i => i)給我的感覺是“把i按照i自身排序”,而不是“一個返回i自身的委托”。這一切,都是在“聲明”這段代碼在“做什么”,而不是“怎么做”。

沒錯,“類型推演”,“省略括號”和“省略return關(guān)鍵字”可能的確都是些“細斜的功能,但也正是這些細微之處帶來了編碼方式上的關(guān)鍵性改變。

以上就通過一個字符串列表的范例,介紹了.NET Lambda表達式的語義特征。

【編輯推薦】

  1. 使用.NET 3.5 Lambda表達式實現(xiàn)委托
  2. 各版本.NET委托的寫法回顧
  3. C# Actor模型開發(fā)實例:網(wǎng)絡(luò)爬蟲
  4. 強類型和Actor:ActorLite的演示
  5. C#的Tag Message回顧:繁瑣而危險
責(zé)任編輯:yangsai 來源: 老趙點滴
相關(guān)推薦

2009-08-10 09:41:07

.NET Lambda

2010-01-05 14:45:58

.NET Framew

2009-08-10 17:11:34

.NET 3.5擴展方Lambda表達式

2012-06-26 10:03:58

JavaJava 8lambda

2009-08-10 10:06:10

.NET Lambda

2009-09-11 09:48:27

Linq Lambda

2009-09-09 13:01:33

LINQ Lambda

2009-09-15 15:18:00

Linq Lambda

2022-12-05 09:31:51

接口lambda表達式

2024-03-25 13:46:12

C#Lambda編程

2009-08-27 09:44:59

C# Lambda表達

2009-09-15 17:30:00

Linq Lambda

2009-09-17 09:44:54

Linq Lambda

2009-09-17 10:40:22

Linq Lambda

2009-11-11 14:19:39

ADO.NET數(shù)據(jù)列

2020-10-16 06:40:25

C++匿名函數(shù)

2021-11-10 09:45:06

Lambda表達式語言

2009-07-09 09:51:07

Lambda表達式C#

2009-08-27 09:57:50

C# Lambda表達

2009-08-31 17:11:37

Lambda表達式
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 极品销魂美女一区二区 | 国产永久免费 | 亚洲精选一区二区 | 国产黄色av电影 | 日韩国产在线 | 国产日韩欧美一区二区 | 欧美一级片在线 | 天天碰夜夜操 | 性视频网 | 国产999精品久久久 精品三级在线观看 | 亚洲精品日韩综合观看成人91 | 98久久| 国产精品视频网 | 天天操天天干天天透 | aa级毛片毛片免费观看久 | 成人免费共享视频 | 黄视频在线网站 | 欧美国产亚洲一区二区 | 天天看夜夜 | 九九精品网 | 国产黄色大片在线观看 | 蜜臀久久99精品久久久久野外 | 日本 欧美 三级 高清 视频 | 成人美女免费网站视频 | 国产1区在线 | 久久精品一 | 国产在线二区 | 精品国产不卡一区二区三区 | 一级片在线观看视频 | 国产精品视频导航 | 一级片片 | 国产欧美一区二区三区在线看蜜臀 | 又爽又黄axxx片免费观看 | 97伦理最新伦理 | 亚洲欧美一区二区三区国产精品 | 91欧美精品成人综合在线观看 | 国产电影一区二区在线观看 | 99久久久国产精品 | 国产精品美女一区二区 | 中文字幕精品一区二区三区精品 | 日本精品久久久久 |