匿名類型是 C# 3.0 語言/編譯器 的新特性,對 .NET Framework 3.5 / CLR 而言,它與一般具名類型無本質差別。CLR 看不出來這是「匿名」產生的。
var p1 = new { Name = "IORI", Age = 27 };
對應的 IL(簡化):
.method private hidebysig static void Main(string[] args) cil managed
{
.entrypoint
.maxstack 3
.locals init ([0] class '<>f__AnonymousType0`2'<string,int32> p1)
IL_0000: nop
IL_0001: ldstr "IORI"
IL_0006: ldc.i4.s 27
IL_0008: newobj instance void class '<>f__AnonymousType0`2'<string,int32>::.ctor(!0, !1)
IL_000d: stloc.0
IL_000e: ret
}
編譯器產生型別名稱:<>f__AnonymousType0`2<string,int32>,泛型參數對應屬性型別。

internal sealed class <>f__AnonymousType0<<Name>j__TPar, <Age>j__TPar>
{
// Fields
private readonly <Age>j__TPar <Age>i__Field;
private readonly <Name>j__TPar <Name>i__Field;
// Methods
public <>f__AnonymousType0(<Name>j__TPar Name, <Age>j__TPar Age);
public override bool Equals(object value);
public override int GetHashCode();
public override string ToString();
// Properties
public <Age>j__TPar Age { get; }
public <Name>j__TPar Name { get; }
}
sealed),不可繼承。get)。Equals、GetHashCode、ToString,實作值語意比較與顯示。System.Object。這一切皆由編譯器在編譯期自動生成,執行期與手寫類別無異。