你可以這樣創建一個使用匿名類型的工程:
1. 打開Visual Studio 2005編輯器,創建一個新工程,選擇LINQ Console作為工程模板;
2. 將新工程命名為AnonTypes並且點擊OK;
3. 在編輯器裡輸入 如下代碼:
// Program.cs
using System;
using System.Query;
using System.Data.DLinq;
namespace AnonTypes
{
class Program
{
static void Main(string[] args)
{
var p1 = new {Name = "A", Price = 3};
Console.WriteLine("Name = {0}\nPrice = {1}",p1.Name, p1.Price);
Console.ReadLine();
}
}
}
4. 編譯程 序
5. 執行程序,獲得如下結果:
Name = A
Price = 3
如果你沒有Visual Studio 2005,你仍然可以通過命令行來編 譯你的代碼:
C:\Program Files\LINQ PrevIEw\Bin\Csc.exe
/reference:"C:\Program Files\LINQ PrevIEw\Bin\System.Data.DLinq.dll"
/reference: System.dll
/reference:"C:\Program Files\LINQ PrevIEw\Bin\System.Query.dll"
/out:AnonTypes.exe /target:exe Program.cs
盡管你沒有清晰的在代碼裡定義一個類,但是C#編譯 器自動做了如下工作:
1. 解析類型
2. 創建一個新的類(擁有 name和price屬性)
3. 使用這個類來初始化一個新對象
4. 將傳 來的參數指定給對象
深入解析代碼
為了了解編譯器如何創建一個 新類的,打開ILDASM(在C:\Program Files\Microsoft Visual Studio 8 \SDK\v2.0\Bin下)並且選擇最近的編譯程序集,AnonTypes.exe。打開樹狀視圖 ,你可以看到如圖1所示的視圖:
圖 1
如果你仔細看,ILDASM展示了一個匿名類型 "<Projection>f__0"是如何被創建的。和類同時被創建的是私 有變量_Name和_Price。對這兩個變量的Get和Set方法也同時被創建,他們也擁 有屬性Name和Price。
雙擊任何方法或者變量來看的清楚一些,如你點擊 Name屬性,你將會看到如下代碼:
.property instance string Name()
{
.get instance string AnonTypes.Program/
'<Projection>f__0'::get_Name()
.set instance void AnonTypes.Program/
'<Projection>f__0'::set_Name (string)
} // end of property '<Projection>f__0'::Name