今天無意中看了4.0的一些新特性,其中看到SystemDynamic 命名空間下的ExpandoObject 類很感興趣,看了篇英文文章給大伙分享下。
先來看下該類的成員:
http://msdn.microsoft.com/en-us/library/system.dynamic.expandoobject_members(VS.100).aspx
再來看看Dynamic對象
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"));
用 ExpandoObject對象:
Console.WriteLine(contact.Address.State);
可是,當你有很多個contact對象時該怎麼辦呢?
呵呵,看代碼:
//用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")
)
&n