1. 程式人生 > 實用技巧 >匿名型別與匿名物件

匿名型別與匿名物件

var 匿名型別(推斷型別)VAR可代替任何型別,編譯器會根據上下文來判斷你到底是想用什麼型別,類似 OBJECT,但是效率比OBJECT高點。 我們可以賦予區域性變數推斷“型別”var而不是顯式型別。var 關鍵字指示編譯器根據初始化語句右側的表示式推斷變數的型別。推斷型別可以是內建型別、匿名型別、使用者定義型別、.NET Framework 類庫中定義的型別或任何表示式。
如:
var a =1 ;
//IDE或編譯器會根據你給a 的值:1,來"推論,斷定"a是一個整數型別.

//同理:
var b ="2";
//因為給b的值是"2"這樣一個字串,所以,b就是string型別...

匿名型別在宣告之時必須初始化,不允許“var a”,,初始化之後的變數的型別不允許再進行修改;

匿名型別(物件)匿名型別是指沒有型別名(型別一般是指類)的型別,因為沒有一個關鍵字去記錄這個型別,所以匿名型別在宣告的同時就需要例項化;匿名型別純粹的c#的語言特性,不是執行時的新型別格式1:
var v=new{欄位1=值;型別欄位2=值;...};
例如:
var v=new{a=1,b="good"};
另外,匿名型別的成員還可以是已經宣告的變數或者其他物件的成員,格式2:
var v=new{變數1,變數2,...};
這種方式的宣告會將變數名直接複製給匿名型別的成員名,例如:
var v=new{a=1,b="good"};
var w=new{v.a,v.b};
這種宣告的方式完全等價於
var v=new{a=1,b="good"};
var w=new{a=v.a,b=v.b};
用處:1、在一個較大的程式程式中,只有一處或很少幾處(不超過3處)需要用到 某個或某些型別(如上 Student),其他地方不再需要這些型別。單獨宣告一個Student型別,所需程式碼量,可能超過使用該型別時的程式碼量,投入產出比不划算。 最典型的例子就是Linq語句中的Select方法,返回任意T型別的集合,這裡就可以用到匿名型別,避免重新宣告類
2、在一處程式中,只需要某種型別物件的部分屬性或方法參與運算。在這種情況下將該型別物件臨時轉換為程式所需的部分屬性和方法的物件,可使程式更加精簡。