網(wǎng)站首頁 編程語言 正文
C#3.0(.NET3.5)中引入了Lambda表達式和LINQ。Lambda表達式是使用一些特殊語法表示匿名方法的較短方法。
一、最基本的Lambda表達式語法如下:
(參數(shù)列表)=>{方法體}
說明:
1、參數(shù)列表中的參數(shù)類型可以是明確類型或者推斷類型。
2、如果是推斷類型,則參數(shù)的數(shù)據(jù)類型將由編輯器根據(jù)上下文自動推斷出來。
讓我們看看Lambda表達式是如何從匿名方法演變而來的。
相關(guān)示例:
delegate(int item) { return item % 2 == 0; };
?1、Lambda表達式從匿名方法演變,首先刪除delegate關(guān)鍵字和參數(shù)類型并添加Lambda運算符=>,演變后的代碼如下:
(item)=>{return item % 2 == 0;};
?2、如果我們只有一個返回值的語句,那么我們不需要花括號、返回和分號,所以我們可以去掉這些符號,演變后的代碼如下:
(item)=>item %2 == 0;
?3、如果我們只有一個參數(shù),我們也可以刪除(),代碼如下:
item=>item %2 == 0;
?因此,我們得到如下所示的Lambda表達式:
item => item % 2 == 0
其中item是參數(shù),=>是Lambda運算符,item % 2 == 0是正文表達式。
二、具有多個參數(shù)的Lambda表達式
如果需要傳遞多個參數(shù),那么必須將參數(shù)括在括號內(nèi),如下所示:
(ints, item) => ints.Contains(item);
?如果不想使用推斷類型,那么可以給出每個參數(shù)的類型,如下所示:
(int[] ints, int item) => ints.Contains(item)
?三、不帶任何參數(shù)的Lambda表達式
在Lambda表達式中可以沒有參數(shù),如下所示:
() => Console.WriteLine("這是一個不帶任何參數(shù)的Lambda表達式");
?四、正文表達式中有多條語句
在前面講過,如果正文表達式有一個語句,那么可以去掉方法體外面的大括號。如果正文表達式中有多條語句,那么必須用大括號將正文表達式括起來,如下所示:
(ints, item) => { Console.WriteLine("這是包含多條語句的Lambda表達式"); return ints.Contains(item); };
?五、表達式中的局部變量
你可以在表達式的主體中聲明一個變量,以便在表達式主體的任何位置使用它,如下所示:
ints => { int item = 10; return ints.Contains(item); };
?六、Lambda表達式中的內(nèi)置泛型委托
1、Func委托
當你想從lambda表達式返回一些東西時,使用Func <> delegate。?
其中T是輸入?yún)?shù)的類型,TResult是返回類型。
示例代碼如下:
FuncisContains = p => p.Equals(10); int[] ints = { 5, 2, 0, 66, 4, 32, 7, 1 }; bool isEquals = isContains(ints);
在上面的例子中,F(xiàn)unc委托期望第一個輸入?yún)?shù)是int[]類型,返回類型是boolean。Lambda表達式是p => p.Equals(10)。
2、Action委托
與Func委托不同,Action委托只能有輸入?yún)?shù)。?當不需要從lambda表達式返回任何值時,請使用Action委托類型。
示例代碼如下:
ActionPrintItem = p => { foreach (int item in p) { Console.WriteLine(item); } }; int[] ints = { 5, 2, 0, 66, 4, 32, 7, 1 }; PrintItem(ints);
七、在LINQ中使用Lambda表達式?
通常情況下,Lambda表達式與LINQ查詢一起使用。枚舉靜態(tài)類包括接受Func
現(xiàn)在,您可以將分配給Func委托的lambda表達式傳遞給方法語法中的Where()擴展方法,如下所示:
FuncisContains = p =>p.Equals (4); int[] ints = { 5, 2, 0, 66, 4, 32, 7, 1 }; var result = ints.Where(isContains).ToList();
?八、Lambda表達式要點總結(jié)
1、Lambda表達式是一種表示匿名方法的更短的方法。?
2、Lambda表達式語法:parameters =>正文表達式
3、Lambda表達式可以在()中具有零個或多個參數(shù)。?
4、Lambda表達式可以在大括號{}中的正文表達式中有一條或多條語句。?
5、Lambda表達式可以分配給Func,Action或Predicate委托。
6、Lambda表達式可以以類似的方式調(diào)用委托。
原文鏈接:https://www.cnblogs.com/dotnet261010/p/8279256.html
相關(guān)推薦
- 2022-12-28 Django初步使用Celery處理耗時任務和定時任務問題_python
- 2023-06-16 C語言中的運算符優(yōu)先級和結(jié)合性一覽表_C 語言
- 2022-07-11 Cadence中denalirc的用法總結(jié)
- 2022-05-23 Python的代理類實現(xiàn),控制訪問和修改屬性的權(quán)限你都了解嗎_python
- 2022-06-22 Python?裝飾器常用的創(chuàng)建方式及源碼示例解析_python
- 2023-10-14 SQL Server 執(zhí)行sql報錯'sys.sp_OACreate' 的訪問
- 2023-12-14 如何統(tǒng)計一個字符在字符串中出現(xiàn)次數(shù)
- 2022-04-09 SpringBoot自定義validation注解校驗參數(shù)只能為指定的值
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學習環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支