LINQ學習系列 1 4 匿名物件

2022-02-09 06:43:55 字數 1130 閱讀 2975

一.匿名物件介紹

上**:                    

var result=new

;

view code

若想輸出這個新物件的age屬性的內容,可以讓console.writeline深入到該物件的下一層,console.writeline(reuslt,1)即可

雖然匿名物件沒有物件名,不過仍然是型別---編譯器將自動為其生成名字。**的result將指向上述自動建立的型別的乙個例項。該型別有三個屬性:id,name,age。這三個屬性是根據初始化器中的宣告而推斷得出的。

二.匿名物件屬性一致的問題

var result1=new

;var result2=new

;var result3=new

;"

view code

上述**中result1和result2屬於同乙個型別的兩個不同的例項。但是result3和result1、result2是屬於不同的型別,因為屬性不一致。

注意:上述**中如果屬性的順序不一致,導致的型別 也是不一致的。

三.匿名物件的限制

1.使用匿名型別時,離開定義該型別的方法,我們將無法再以強型別的方式使用此匿名型別的例項。若要使在此方法內,我們希望將某個匿名型別的例項傳遞給某一方法的話,被傳遞的方法的這個引數的型別必須是object.

2.在定義匿名型別的方法之外,我們只能使用反射來進一步操作該型別的例項。

3.定義該匿名型別的方法的返回值型別必須是object,否則匿名型別將不能夠作為方法的返回值。

4.匿名型別的例項時不可變的,一旦建立了乙個匿名型別的例項,那麼該例項的各個屬性值就將永遠被確定下來了,所有的屬性只能get,不能set。

四.匿名物件的不可變特性

因為匿名型別具有不可變的特性,所以其所有的例項都有穩定的雜湊值(hash code)。

匿名物件不可變的目的:永遠不會改變的物件能夠大大降低程式設計中對併發控制的處理難度。這在後續的plinq中起著非常關鍵的作用。(在某個物件在某個時刻的快照的時候無需考慮其可能帶來的不一致的***)。

Linq學習總結(1) 匿名型別

匿名型別關鍵字var var關鍵字,可以把它理解為型別佔位符,它並不是c 中的一種基本型別。它能在你編寫程式的時候,自動計算出等式右邊的型別,而且支援智慧型感知。可以是整型 var vint 123 可以是字串 var vstring hello var 可以是日期型別 var vdatetime ...

LINQ學習系列 1 3 擴充套件方法

這篇內容繼續接著昨天的lambda表示式的原始碼繼續下去。昨天講了lambda表示式,此篇講擴充套件方法,這兩點都是linq帶來的新特性。一.擴充套件方法介紹 廢話不多說,先上原始碼截圖 上圖中getmemorycount就是乙個擴充套件方法,從上圖的標註可以得出以下幾點資訊 2.擴充套件方法和被包...

原創 LINQ 學習系列教程文章索引

下面文章是作者在實際專案中學習的積累,希望能給後來者提供一些範例 linq 學習系列 1 使用 linq to sql 的典型步驟 linq 學習系列 2 linq to sql 查詢 linq 學習系列 3 學習linq的幾個基礎知識 linq 學習系列 4 linq教程例項 linq單錶操作 l...