淺析C# 9.0 新特性之 Lambda 棄元參數(shù)
大家好,這是 C# 9.0 新特性短系列的第 5 篇文章。
棄元(Discards) 是在 C# 7.0 的時候開始支持的,它是一種人為丟棄不使用的臨時虛擬變量。語法上它是用來賦值的,但它卻不被分配存儲空間,即沒有值,所以不能從中讀取值。棄元用 _(下劃線) 表示,下劃線是一個關(guān)鍵字,只能賦值,不能讀取,例如:
在 C# 7.0 中,棄元的使用場景主要有下面四種:
- 元組和對象的解構(gòu)
- 使用 is 和 switch 的模式匹配
- 對具有 out 參數(shù)的方法的調(diào)用
- 作用域內(nèi)獨立使用場景
針對這幾個場景,用下面的幾段代碼演示一下。
場景一:元組/對象的解構(gòu)
var tuple = (1, 2, 3, 4, 5); (_, _, _, _, var fifth) = tuple;
場景二:使用 is/switch 的模式匹配
var obj = CultureInfo.CurrentCulture.DateTimeFormat; switch (obj) { case IFormatProvider fmt: Console.WriteLine($"{fmt} object"); break; case null: Console.Write("A null object reference"); break; case object _: Console.WriteLine("Some object type without format information"); break; } if (obj is object _) { ... }
場景三:對具有 out 參數(shù)的方法的調(diào)用
var point = new Point(10, 10); // 只要 x, 不關(guān)心 y point.GetCoordinates(out int x, out _);
場景四:作用域內(nèi)獨立使用場景
void Test(Dto dto) { _ = dto ?? throw new ArgumentNullException(nameof(dto)); }
理解了棄元,也了解了棄元的四種使用場景,那么對下面這個 C# 9.0 新支持的棄元使用場景就容易理解了。
C# 9.0 對棄元增加了一種場景支持:Lambda 參數(shù),也包括匿名方法參數(shù)。示例:
// C# 9 之前 Func<int, int, int> zero = (a, b) => 0; Func<int, int, int> func = delegate (int a, int b) { return 0; }; // C# 9 Func<int, int, int> zero = (_, _) => 0; Func<int, int, int> func = delegate (int _, int _) { return 0; };
在 C# 9 之前,即便不使用的 Lambda 參數(shù)也需要給它命名。C# 9 支持棄元參數(shù)一方面簡化了命名,另一方面也節(jié)省了內(nèi)存分配。更重要的是它使得編程的意圖更明確,讓人一看就知道這個參數(shù)是不用的,增強了代碼的可讀性和可維護(hù)性。
參考:
[Discards - C# Guide] http://dwz.date/bpuV
以上就是淺析C# 9.0 新特性之 Lambda 棄元參數(shù)的詳細(xì)內(nèi)容,更多關(guān)于c# Lambda 棄元參數(shù)的資料請關(guān)注腳本之家其它相關(guān)文章!
- C# 內(nèi)部類與Lambda表達(dá)式用法詳解
- C# 本地函數(shù)與 Lambda 表達(dá)式詳細(xì)介紹
- C# LINQ查詢表達(dá)式及對應(yīng)LAMBDA表達(dá)式的用法
- C# Lambda表達(dá)式及Lambda表達(dá)式樹的創(chuàng)建過程
- C# lambda表達(dá)式原理定義及實例詳解
- c#基礎(chǔ)知識---委托,匿名函數(shù),lambda
- C# lambda表達(dá)式應(yīng)用如何找出元素在list中的索引
- C#匿名委托與Lambda表達(dá)式詳解
- 關(guān)于C#10 新特性 Lambda 優(yōu)化
相關(guān)文章
C#跨平臺開發(fā)之使用C/C++生成的動態(tài)鏈接庫
這篇文章介紹了C#跨平臺開發(fā)之使用C/C++生成的動態(tài)鏈接庫,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-01-01linux操作系統(tǒng)安裝MONO執(zhí)行C#程序的詳解步驟
這篇文章主要介紹了linux操作系統(tǒng)安裝MONO執(zhí)行C#程序詳解步驟,有需要的可以參考一下2013-12-12C#實現(xiàn)SMTP服務(wù)發(fā)送郵件的示例代碼
這篇文章主要為大家詳細(xì)介紹了如何利用C#實現(xiàn)SMTP服務(wù)發(fā)送郵件的功能,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)C#有一定的幫助,感興趣的小伙伴可以跟隨小編一起了解一下2022-12-12