C 元組投影初始值設定項

2021-10-02 19:35:34 字數 2074 閱讀 8256

使用過命名元組的同學都知道,命名元組可以使用「有意義的欄位名」來代替item,用於表示元組的成員。在c#7.1中引入了「元組投影初始值設定項」(tuple projection initializers)提公升了命名元組的程式設計體驗

一般情況下,我們會採用下面這種方式進行命名元組的建立

var firstname =

"huang"

;var secendname =

"tengxiao"

;var fullname =

(firstname:firstname,secendname:secendname)

;console.

writeline

(fullname.firstname)

;console.

writeline

(fullname.secendname)

;

但是在c#7.1之後可以使用如下寫法,在式子中,元組採用構造時的變數名稱對欄位進行初始化

var firstname =

"huang"

;var secendname =

"tengxiao"

;var fullname =

(firstname,secendname)

;console.

writeline

(fullname.firstname)

;console.

writeline

(fullname.secendname)

;

另外對於沒有提供變數名稱的初始化方式,元組會採用匿名元組預設的item名稱對欄位名稱進行初始化。例如

另外在以下兩種情況下,不會將候選欄位名稱投影到元組字段:

候選名稱是保留元組名稱時。 示例包括itemxtostring、 或rest

候選名稱重複了另一元組的顯式或隱式欄位名稱時。

如下面的例子,在使用保留字,或者出現重名的時候,都會採用匿名元組預設的item名稱對欄位名稱進行初始化。

var item3 =

"huang"

;var rest =

"tengxiao"

;var fullname =

(item3,rest)

;console.

writeline

(fullname.item1)

;console.

writeline

(fullname.item2)

;var pt1 =

(x:3

, y:0)

;var pt2 =

(x:3

, y:4)

;var xcoords =

(pt1.x, pt2.x)

;console.

writeline

(xcoords.item1)

;console.

writeline

(xcoords.item2)

;

不過有個小tips,對於c#這種區分大小寫命名的語言,只要採用如下的小寫命名就不會同保留字產生衝突。

(快去統一你們團隊的命名元組程式設計規範吧~)

var item3 =

"huang"

;var rest =

"tengxiao"

;var fullname =

(item3,rest)

;console.

writeline

(fullname.item3)

;console.

writeline

(fullname.rest)

;

本文會經常更新,請閱讀個人部落格原文: ,以避免陳舊錯誤知識的誤導,同時有更好的閱讀體驗。

c 型別初始值設定項引發異常

typeinitializationexeption在msnd中的描述為 當類初始值設定項不能初始化型別時,將建立 typeinitializationexception 並向其傳遞由該型別的類初始值設定項引發的異常引用。我們知道,型別初始化或者訪問型別的靜態成員時,都會對類中的其他靜態成員進行初始...

型別初始值設定項引發異常

連續兩天都為這個執行時錯誤 型別初始值設定項引發異常 而煩惱,除錯也不知道 出了問題。在王舒和陳雄學長的幫助下,哈哈,終於就解決啦!問題是這樣嘀 專案採用了三層架構和工廠模式,對專案新增引用的。1 web 引用 bll。2 bll 引用 idal,model,使用dalfactory建立例項。3 i...

關於「型別初始值設定項引發異常」

今天在除錯程式時發現了乙個異常 型別初始值設定項引發異常 第一次發現。關於typeinitializationexception異常,msdn的解析 由類初始值設定項引發的異常周圍的包裝引發的異常。程式裡面的異常點是獲取單一例項物件是報的異常,百思不得其解。再仔細查一下發現單一例項物件為null,例...