以往在 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 啊!
沒有留言:
張貼留言