淺析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)獨(dú)立使用場景
針對這幾個場景,用下面的幾段代碼演示一下。
場景一:元組/對象的解構(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)獨(dú)立使用場景
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ù)是不用的,增強(qiáng)了代碼的可讀性和可維護(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á)式原理定義及實(shí)例詳解
- c#基礎(chǔ)知識---委托,匿名函數(shù),lambda
- C# lambda表達(dá)式應(yīng)用如何找出元素在list中的索引
- C#匿名委托與Lambda表達(dá)式詳解
- 關(guān)于C#10 新特性 Lambda 優(yōu)化
相關(guān)文章
C#實(shí)現(xiàn)在購物車系統(tǒng)中生成不重復(fù)訂單號的方法
這篇文章主要介紹了C#實(shí)現(xiàn)在購物車系統(tǒng)中生成不重復(fù)訂單號的方法,涉及C#中時間與字符串操作的相關(guān)技巧,非常簡單實(shí)用,需要的朋友可以參考下2015-05-05

