C 中Lambda表示式

2021-06-25 20:52:11 字數 1361 閱讀 9217

c#語言還是比較常見的東西,這裡我們主要介紹c# lambda表示式,包括介紹乙個lambda就是乙個delegate,乙個delegate指向乙個方法等方面。

你有沒有接觸過c# lambda表示式,有沒有覺得匿名方法這東西很不錯,減少了很多**阿,但是匿名方法的使用還並不人性化,什麼是人性化呢?比如你可以用自然的語言將程式**讀出來,這樣才算人性化了。在.net 2.0中system.collections.generic命名空間下list裡有一些新增的方法。比如find,如果使用匿名方法我們如何呼叫呢:

books.find(delegate(book book));
**是很簡單,但是卻無法朗讀出來,來看看c# lambda表示式的寫法:
books.find(book=>book.price<50);
這個c# lambda表示式就可以這樣

閱讀出來了:給你一本書,如果它的**小於50則返回true。

好了,那我們就走進c# lambda表示式吧:

將使用了c# lambda表示式的程式集反編譯後,我們發現,它實際上和匿名方法沒有什麼不同。lambda的輸入引數就對應著delegate括號裡面的引數,由於c# lambda表示式可以推斷引數的型別,所以這裡的引數無需宣告。

lambda操作符讀作」goes to」,它後面緊跟著表示式或者是語句塊(這點和匿名方法也不同,匿名方法只能使用語句塊而不能使用表示式),下面我就用例項來說明一下有那些型別的c# lambda表示式:

//x的型別省略了,編譯器可以根據上下文推斷出來,後面跟著的是表示式  

x => x+1

deleage(int x)

//後面跟著的是語句塊

x=>

delegate(int x)

//輸入引數也可以帶型別,帶型別後別忘記小括號哦

(int x) => x+1

delegate(int x)

//也可以多個輸入引數,逗號分隔,別忘記小括號

(x,y) => x+y

delegate(int x,int y)

//無參的也行

() => 1

delegate()

對於c# lambda表示式來說她的用法就是如此,但是在lambda背後卻有很多的故事和玄機。用c# lambda表示式可以構建表示式樹,而表示式樹對於linq來說就像樹根對於樹一樣重要。在這裡就不討論表示式樹的問題了,這個東西也不是三言兩語能夠說清楚的,等待時機成熟的時候我們再來進一步討論。

C 中lambda表示式

在介紹lambda表示式之前,我想先介紹以下c 標準庫所支援的傳統謂詞以及傳統謂次的不足,而由此才引入的lambda表示式 謂詞是個可呼叫的表示式,其返回結果是乙個能作為條件的值。謂詞分為一元和二元,一元的可呼叫物件只能有乙個引數,二元只能有倆個引數 我們以一元謂詞舉例 c 標準庫中的find if...

lambda表示式 lambda表示式

1.概述 c 11 中的 lambda 表示式用於定義並建立匿名的函式物件,以簡化程式設計工作。lambda 的語法形式如下 函式物件引數 操作符過載函式引數 mutable 或 exception 宣告 返回值型別可以看到,lambda 主要分為五個部分 函式物件引數 操作符過載函式引數 muta...

C 中的Lambda表示式

c 11開始支援lambda表示式 原文 一段簡單的code 我也不是文藝的人,對於lambda的歷史,以及lambda與c 的那段淵源,我也不是很熟悉,技術人,講究拿 說事。複製 如下 include using namespace std int main return 0 當我第一次看到這段 ...