文是介紹C#中也就是NET中的一個新對象ExpandoObject希望通過對這個ExpandoObject類的介紹能幫助大家更好的理解NET
今天無意中看了的一些新特性其中看到SystemDynamic 命名空間下的ExpandoObject 類很感興趣看了篇英文文章給大伙分享下
先來看下該類的成員us/library/systemdynamicexpandoobject_members(VS)aspx
ExpandoObject instances can add and remove members at run time什麼意思呢?這意味著此類的實例能夠在運行時動態的增加和刪除成員其中有個新概念dynamic language runtime (DLR)(動態語言運行時)我才疏學淺還希望各位專家們多去研究下
說說ExpandoObject這個動態特性的意義吧我們用XML來做下對比
首先我們創建一個XML對象
XElement contactXML = new XElement(Contact
new XElement(Name Patrick Hines)
new XElement(Phone )
new XElement(Address
new XElement(Street Main St)
new XElement(City Mercer Island)
new XElement(State WA)
new XElement(Postal )
)
);
再來看看Dynamic對象
dynamic contact = new ExpandoObject();
contactName = Patrick Hines;
contactPhone = ;
contactAddress = new ExpandoObject();
contactAddressStreet = Main St;
contactAddressCity = Mercer Island;
contactAddressState = WA;
contactAddressPostal = ;
首先我們看下dynamic對象的聲明dynamic contact = new ExpandoObject();
我沒有寫成 ExpandoObject contact = new ExpandoObject() 因為我用靜態的ExpandoObject 類型來聲明則此對象沒有在運行時增加成員的特性所以我使用新的關鍵字dynamic
其次大家能注意到我創建一個子節點只需要創建一個ExpandoObject實例作為contact對象的成員 這樣你可以很簡單的看清父子節點之間的關系更重要的是你可以很簡單的訪問每一個元素
用LINQ to XML
ConsoleWriteLine((string)contactXMLElement(Address)Element(State));
用 ExpandoObject對象 ConsoleWriteLine(contactAddressState);
可是當你有很多個contact對象時該怎麼辦呢?呵呵看代碼Code//用XML 方式XElement contactsXML = new XElement
(Contacts new XElement(Contact new XElement(Name Patrick Hines)
new XElement(Phone ) )
new XElement(Contact new XElement(Name Ellen Adams)
new XElement(Phone )
)
);
//用dynamic對象dynamic contacts = new List();
contactsAdd(new ExpandoObject());
contacts[]Name = Patrick Hines;
contacts[]Phone = ;contactsAdd(new ExpandoObject());
contacts[]Name = Ellen Adams;contacts[]Phone = ;
再來看看用Linq to Object怎麼來操作dynamic吧
var phones = from c in (contacts as List)where cName == Patrick Hinesselect cPhone;
大家看了這個新特性有什麼感受呢?想不想立刻感受下C# ?不管怎麼樣我是很期待啦希望NET越來越強大~~
From:http://tw.wingwit.com/Article/program/net/201311/13603.html