位置:首頁(yè) > 軟件操作教程 > 編程開(kāi)發(fā) > C# > 問(wèn)題詳情

C# 匿名類型

提問(wèn)人:劉團(tuán)圓發(fā)布時(shí)間:2020-12-08

    在編寫程序一段時(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也允許查看匿名類型的成員,如圖所示。

image.png

注意,這里顯示的屬性定義為只讀屬性。這表示,如果要在數(shù)據(jù)存儲(chǔ)對(duì)象中修改屬性的值,就不能使用匿名類型。

繼續(xù)查找其他問(wèn)題的答案?

相關(guān)視頻回答
回復(fù)(0)
返回頂部