使用過命名元組的同學都知道,命名元組可以使用「有意義的欄位名」來代替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
名稱對欄位名稱進行初始化。例如
另外在以下兩種情況下,不會將候選欄位名稱投影到元組字段:
候選名稱是保留元組名稱時。 示例包括itemx
、tostring
、 或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,例...