溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

C#9.0目標(biāo)類型推導(dǎo)new表達(dá)式舉例分析

發(fā)布時(shí)間:2021-11-24 13:40:35 來源:億速云 閱讀:101 作者:iii 欄目:大數(shù)據(jù)

本篇內(nèi)容介紹了“C#9.0目標(biāo)類型推導(dǎo)new表達(dá)式舉例分析”的有關(guān)知識,在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

關(guān)于類型推導(dǎo)想必大家都很熟悉,它是在 var 關(guān)鍵字引入的時(shí)候引入 C# 的。

var i = 10;
var u = new User();

編譯器會(huì)通過右邊的字面量自動(dòng)推導(dǎo)左邊變量的類型,這種推導(dǎo)方式可以歸納為:從上下文右邊推導(dǎo)出左邊的類型。我們不防把它稱為源類型推導(dǎo)(Source-typed inferring,參考 Target-typed 自創(chuàng)的術(shù)語)。

相應(yīng)的,有源類型推導(dǎo)就有目標(biāo)類型推導(dǎo) (Target-typed inferring),它是指從上下文左邊推導(dǎo)出右邊的類型。比如數(shù)組的初始化和 Lambda 表達(dá)式常常是目標(biāo)類型推導(dǎo)的表達(dá)式。舉個(gè)例子:

// 沒有使用類型推導(dǎo)
string[] s = new string[] { "a", "b" };
// 目標(biāo)類型推導(dǎo)(左推右)
string[] s = new { "a", "b" };
string[] s = new [] { "a", "b" };

// 沒有使用類型推導(dǎo)
Users.FirstOrDefault<User>(u => u.id = 123);
// 目標(biāo)類型推導(dǎo)(左推右)
Users.FirstOrDefault(u => u.id = 123);

這次在 C# 9 中,增加了用戶定義類型 new 表達(dá)式的目標(biāo)類型推導(dǎo),即通過上下文左邊自動(dòng)推導(dǎo) new 表達(dá)式的類型,從而在使用 new 構(gòu)造時(shí)省略類型的指定,請看示例:

// C# 9 之前
Point p = new Point(3, 5);

// C# 9
Point p = new (3, 5);

除此之外,C# 9 也增加了操作符 ?? 和 ?: 的目標(biāo)類型推導(dǎo)支持。之前這兩個(gè)操作符必須要求兩邊的操作對象都是相同的類型,否則會(huì)編譯報(bào)錯(cuò)。而在 C# 9 中,只要目標(biāo)類型是操作對象共同的基類就不再會(huì)編譯報(bào)錯(cuò)了,比如:

// Student 和 Customer 擁有共同的父類 Person
Person person = (Person)(student ?? customer); // C# 9 之前
Person person = student ?? customer; // C# 9

// 可空類型,0 和 null 都可以隱式轉(zhuǎn)換為 int? 類型
int? result = b ? 0 : (int?)null; // C# 9 之前
int? result = b ? 0 : null; // C# 9

其實(shí)本文的核心就一句代碼:

Point p = new (3, 5);

“C#9.0目標(biāo)類型推導(dǎo)new表達(dá)式舉例分析”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

new
AI