以往在 c#3.0 ,使用 anonomous type時,有個嚴重的限制。那就是不能離開該 scope 如下
class Program
{
static void Main(string[] args)
{
var q = new { Name = "Charles", Id = 1 };
Console.WriteLine("Name = {0}, Id = {1}", q.Name, q.Id);
}
}
q 是一個 anonomous type, 無法離開 Main 的範圍。因此無法將 q 的結果以下面的方式表示,因為會出現 compile time 錯誤。System.Object 沒有 Name 及 Id 的屬性。
class Program
{
static void Main(string[] args)
{
var q = new { Name = "Charles", Id = 1 };
DoWriteMessage(q);
}
private static void DoWriteMessage(object q)
{
Console.WriteLine("Name = {0}, Id = {1}", q.Name, q.Id);
}
}
然而,使用 C#4.0 的 dynamic 就完成了
class Program
{
static void Main(string[] args)
{
var q = new { Name = "Charles", Id = 1 };
DoWriteMessage(q);
}
private static void DoWriteMessage(dynamic o)
{
Console.WriteLine("Name = {0}, Id = {1}", o.Name, o.Id);
}
}
dynamic 說明了 o 在 compile time 是什麼型別不重要,一切等到 runtime 再說。到了 runtime 時,取出 o 的Name 及 Id 屬性。
必須注意到,o 在 coding 時完全無法使用 intellisense,畢竟它是 dynamic 啊!
沒有留言:
張貼留言