C# 匿名類型
在編寫程序一段時(shí)間后,會(huì)發(fā)現(xiàn)我們要花費(fèi)很多時(shí)間為數(shù)據(jù)表示創(chuàng)建簡(jiǎn)單、乏味的類,在數(shù)據(jù)庫(kù)應(yīng)用程序中尤其如此。常常有一系列類只提供屬性。本章前面的Animal類就是一個(gè)很好的例子:
public class Animal
{
public string Name { get; set; }
public int Age { get; set; }
public double Weight { get; set; }
}
這個(gè)類什么也沒(méi)做,只是存儲(chǔ)結(jié)構(gòu)化數(shù)據(jù)。在數(shù)據(jù)庫(kù)或電子表格中,可以把這個(gè)類看成表中的一行??梢员4孢@個(gè)類的實(shí)例的集合類應(yīng)表示表或電子表格中的多個(gè)行。
這是類完全可以接受的一種用法,但編寫這些類的代碼比較單調(diào),對(duì)底層數(shù)據(jù)模式的任何修改都需要添加、刪除或修改定義類的代碼。
匿名類型(anonymous type)是簡(jiǎn)化這個(gè)編程模型的一種方式。其理念是使用C#編譯器根據(jù)要存儲(chǔ)的數(shù)據(jù)自動(dòng)創(chuàng)建類型,而不是定義簡(jiǎn)單的數(shù)據(jù)存儲(chǔ)類型。
可按如下方式實(shí)例化前面的Animal類型:
Animal animal = new Animal
{
Name = "Benjamin",
Age = 42,
Weight = 185.4
};
也可以使用匿名類型,如下所示:
var animal = new
{
Name = "Lea",
Age = 11,
Weight = 30.2
};
這里有兩個(gè)區(qū)別。第一,使用了var關(guān)鍵字。這是因?yàn)槟涿愋蜎](méi)有可以使用的標(biāo)識(shí)符。稍后可以看到,它們?cè)趦?nèi)部有一個(gè)標(biāo)識(shí)符,但不能在代碼中使用。第二,在new關(guān)鍵字的后面沒(méi)有指定類型名,這是編譯器確定我們要使用匿名類型的方式。
IDE檢測(cè)到匿名類型定義后,會(huì)相應(yīng)地更新IntelliSense。通過(guò)前面的聲明,可以看到如下所示的匿名類型。
var animal = new
{
Nante = "Lea",
Age = 11,
Weight = 30.2
};
aniotal
[*] (local variable)'a animal
Anonymous Types:
'a is new {string Name, mt Age. double Weight)
其中,變量animal的類型是'a。顯然,不能在代碼中使用這個(gè)類型——它甚至不是合法的標(biāo)識(shí)符名稱。'符號(hào)用于在IntelliSense中表示匿名類型。InteiliSense也允許查看匿名類型的成員,如圖所示。
注意,這里顯示的屬性定義為只讀屬性。這表示,如果要在數(shù)據(jù)存儲(chǔ)對(duì)象中修改屬性的值,就不能使用匿名類型。
點(diǎn)擊加載更多評(píng)論>>