2010-08-14 42 views
2

我在我的C#代碼中使用var abc = new { id = 0 };,而不知道它究竟是什麼類型!什麼類型是C#中的「new {id = 0}」?

是簡單地稱爲對象嗎?它是一種特定類型的對象嗎?

我想知道怎麼我不知道如何將字段添加到這種類型的對象

簡單的例子: 我有var abc = new { id = 0 };,我要添加到abc領域name = "david"

回答

9

這是一個anonymous type,也就是說,它沒有可以在代碼中使用的類型(儘管編譯器會生成一個類型)。

MSDN說:由編譯器產生的

類型名稱,並且不可在源代碼級。

如果你想添加的屬性,你可以簡單地這樣做:

var abc = new { id = 0, name = "david" }; 
+0

能否downvote請解釋一下爲什麼? – Oded 2010-08-14 15:47:36

+0

我只能猜測,但也許是因爲它不是真的正確。它*具有顯式類型,只是該類型是由編譯器創建的,並且沒有名稱(編譯器內部除外)。 – Guffa 2010-08-14 16:00:11

+0

@Guffa - 可能...我修改了我的答案,使其更加正確。 – Oded 2010-08-14 16:02:35

1

它創建匿名類對象,其中一個字段名爲id。詳情請看msdn。一旦你創建對象它不能被擴展

這一下這個類看起來打開時與.net反射

[CompilerGenerated, DebuggerDisplay(@"\{ id = {id} }", Type="<Anonymous Type>")] 
internal sealed class <>f__AnonymousType0<<id>j__TPar> 
{ 
    // Fields 
    [DebuggerBrowsable(DebuggerBrowsableState.Never)] 
    private readonly <id>j__TPar <id>i__Field; 

    // Methods 
    [DebuggerHidden] 
    public <>f__AnonymousType0(<id>j__TPar id); 

    [DebuggerHidden] 
    public override bool Equals(object value); 

    [DebuggerHidden] 
    public override int GetHashCode(); 

    [DebuggerHidden] 
    public override string ToString(); 

    // Properties 
    public <id>j__TPar id { get; } 
} 

所以其編譯爲常規類的基本區別是,它不能法範圍之外使用等。