文是介绍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越来越强大~~