C# 4.0 新物件ExpandoObject
今天無意中看了4.0的一些新特性,其中看到SystemDynamic 名稱空間下的ExpandoObject 類很感興趣,看了篇英文文章給大夥分享下。
先來看下該類的成員:
http://msdn.microsoft.com/en-us/library/system.dynamic.expandoobject_members(VS.100).aspx
ExpandoObject instances can add and remove members at run time.什麼意思呢?這意味著此類的例項能夠在執行時動態的增加和刪除成員。
其中有個新概念:dynamic language runtime (DLR)(動態語言執行時),我才疏學淺,還希望各位專家們多去研究下。
說說ExpandoObject這個動態特性的意義吧。
我們用XML來做下對比:
首先我們建立一個XML物件,
<!--
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->XElement contactXML =
new XElement("Contact",
new XElement("Name", "Patrick Hines"),
new XElement("Phone", "206-555-0144"),
new XElement("Address",
new XElement("Street1", "123 Main St"),
new XElement("City", "Mercer Island"),
new XElement("State", "WA"),
new XElement("Postal", "68042")
)
);
再來看看Dynamic物件,
<!--
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->dynamic contact = new ExpandoObject();
contact.Name = "Patrick Hines";
contact.Phone = "206-555-0144";
contact.Address = new ExpandoObject();
contact.Address.Street = "123 Main St";
contact.Address.City = "Mercer Island";
contact.Address.State = "WA";
contact.Address.Postal = "68402";
首先,我們看下dynamic物件的宣告:dynamic contact = new ExpandoObject();
我沒有寫成 ExpandoObject contact = new ExpandoObject(), 因為我用靜態的ExpandoObject 型別來宣告則此物件沒有在執行時增加成員的特性,所以我使用新的關鍵字dynamic.
其次,大家能注意到,我建立一個子節點只需要建立一個ExpandoObject例項作為contact物件的成員。
這樣你可以很簡單的看清父子節點之間的關係,更重要的是你可以很簡單的訪問每一個元素。
用linq to XML:
Console.WriteLine((string)contactXML.Element("Address").Element("State"));
Console.WriteLine(contact.Address.State);
可是,當你有很多個contact物件時該怎麼辦呢?
呵呵,看程式碼:
Code
<!--
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->//用XML 方式:
XElement contactsXML =
new XElement("Contacts",
new XElement("Contact",
new XElement("Name", "Patrick Hines"),
new XElement("Phone", "206-555-0144")
),
new XElement("Contact",
new XElement("Name", "Ellen Adams"),
new XElement("Phone", "206-555-0155")
)
);
//用dynamic物件:
dynamic contacts = new List<dynamic>();
contacts.Add(new ExpandoObject());
contacts[0].Name = "Patrick Hines";
contacts[0].Phone = "206-555-0144";
contacts.Add(new ExpandoObject());
contacts[1].Name = "Ellen Adams";
contacts[1].Phone = "206-555-0155";
再來看看用Linq to Object怎麼來操作dynamic吧,
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->var phones = from c in (contacts as List<dynamic>)
where c.Name == "Patrick Hines"
select c.Phone;
大家看了這個新特性有什麼感受呢?想不想立刻感受下c# 4.0?不管怎麼樣我是很期待啦。。希望.net越來越強大~~你可是我的飯碗啊(PS:堅決不會轉向java)
原文地址:http://www.cnblogs.com/417533880/archive/2009/10/19/1585981.html
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-617203/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- c# ExpandoObject動態擴充套件物件C#Object套件物件
- C# ExpandoObject用法C#Object
- c# dynamic和ExpandoObjectC#Object
- C# ExpandoObject的使用C#Object
- 理解C# 4 dynamic(2) – ExpandoObject的使用C#Object
- Rails 4.0新特性介紹AI
- C# 物件C#物件
- C#DynamicObject和ExpandoObject用法C#Object
- Apache Cassandra 4.0新特性介紹Apache
- C# 物件鎖C#物件
- C#-----ExpandoObject動態屬性C#Object
- C# 4.0 大數的運算,BigIntegerC#
- TiDB 4.0 新特性嚐鮮指南TiDB
- Redis4.0的新特性介紹Redis
- 挖一挖C#中那些我們不常用的東西之系列(4)——GetHashCode,ExpandoObjectC#Object
- C# list物件排序C#物件排序
- C# 物件鎖——MonitorC#物件
- C#新特性C#
- [譯] Vue Devtools 4.0 有哪些新內容Vuedev
- 學習使用ExpressJS 4.0中的新RouterExpressJS
- 認識 MongoDB 4.0 的新特性——事務(Transactions)MongoDB
- Node.js 4.0的ES6新特性。Node.js
- Java SE 6 新特性: Java DB 和 JDBC 4.0JavaJDBC
- xlua中lua物件到c#物件的轉型物件C#
- C# 9.0新特性C#
- C# 2.0 新特性C#
- C#物件初始化器C#物件
- 用C#建立COM物件 (轉)C#物件
- TiDB 4.0 新特性前瞻:白話 “悲觀鎖”TiDB
- .net 4.0 中對多執行緒新特性(轉)執行緒
- android4.0新控制元件Switch方法解析Android控制元件
- C# .Net4.0 專案怎麼做單元測試C#
- 天翼雲4.0創新成果釋出!科技創新賦能安全普惠
- 深入理解 c# 第十四章 一個通過 ExpandoObject實現簡單XML DOM 變換 建立DOM樹C#ObjectXML
- C# 10的新特性C#
- C# 6.0 的新特性C#
- C# 高效能物件複製C#物件
- C# 高效能物件對映C#物件