我在我的C#代碼中使用var abc = new { id = 0 };
,而不知道它究竟是什麼類型!什麼類型是C#中的「new {id = 0}」?
是簡單地稱爲對象嗎?它是一種特定類型的對象嗎?
我想知道怎麼我不知道如何將字段添加到這種類型的對象
簡單的例子: 我有var abc = new { id = 0 };
,我要添加到abc
領域name = "david"
我在我的C#代碼中使用var abc = new { id = 0 };
,而不知道它究竟是什麼類型!什麼類型是C#中的「new {id = 0}」?
是簡單地稱爲對象嗎?它是一種特定類型的對象嗎?
我想知道怎麼我不知道如何將字段添加到這種類型的對象
簡單的例子: 我有var abc = new { id = 0 };
,我要添加到abc
領域name = "david"
這是一個anonymous type,也就是說,它沒有可以在代碼中使用的類型(儘管編譯器會生成一個類型)。
MSDN說:由編譯器產生的
類型名稱,並且不可在源代碼級。
如果你想添加的屬性,你可以簡單地這樣做:
var abc = new { id = 0, name = "david" };
它創建匿名類對象,其中一個字段名爲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; }
}
所以其編譯爲常規類的基本區別是,它不能法範圍之外使用等。
能否downvote請解釋一下爲什麼? – Oded 2010-08-14 15:47:36
我只能猜測,但也許是因爲它不是真的正確。它*具有顯式類型,只是該類型是由編譯器創建的,並且沒有名稱(編譯器內部除外)。 – Guffa 2010-08-14 16:00:11
@Guffa - 可能...我修改了我的答案,使其更加正確。 – Oded 2010-08-14 16:02:35