zoukankan      html  css  js  c++  java
  • 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

    再来看看Dynamic对象,

    Code

    首先,我们看下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对象时该怎么办呢?
    呵呵,看代码:
    Code

    再来看看用Linq to Object怎么来操作dynamic吧,

    var phones = from c in (contacts as List<dynamic>)
                 
    where c.Name == "Patrick Hines"
                 select c.Phone;

    大家看了这个新特性有什么感受呢?想不想立刻感受下c# 4.0?不管怎么样我是很期待啦。。希望.net越来越强大~~你可是我的饭碗啊(PS:坚决不会转向java)

    作者:forrestlyu
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
    dotnet core精英交流QQ群欢迎大家的加入: 476097512
  • 相关阅读:
    POJ 2236 Wireless Network(并查集)
    POJ 2010 Moo University
    POJ 3614 Sunscreen(贪心,区间单点匹配)
    POJ 2184 Cow Exhibition(背包)
    POJ 1631 Bridging signals(LIS的等价表述)
    POJ 3181 Dollar Dayz(递推,两个long long)
    POJ 3046 Ant Counting(递推,和号优化)
    POJ 3280 Cheapest Palindrome(区间dp)
    POJ 3616 Milking Time(dp)
    POJ 2385 Apple Catching(01背包)
  • 原文地址:https://www.cnblogs.com/forrestlyu/p/1585981.html
Copyright © 2011-2022 走看看