代码之家  ›  专栏  ›  技术社区  ›  Lasse Espeholt

如何在C中扩充匿名类型对象#

  •  5
  • Lasse Espeholt  · 技术社区  · 14 年前

    例如,我经常需要用一个属性来扩充一个对象。直到现在(厌倦了)我也这么做了:

    var someListOfObjects = ...;
    
    var objectsWithMyProperty = from o in someListOfObjects
                                select new
                                {
                                    o.Name,    /* Just copying all the attributes I need */
                                    o.Address, /* which may be all of them. */
    
                                    SomeNewProperty = value
                                };
    

    有什么聪明的办法吗?我以前做过的事情是这样的:

    var objectsWithMyProperty = from o in someListOfObjects
                                select new
                                {
                                    OldObject = o,           /* I access all of the old properties from here */    
                                    SomeNewProperty = value
                                };
    

    我想这可以通过一些思考来完成,但是我想有一种更快的方法可以使一些东西与第一种麻烦的方法等价。

    谢谢,拉丝

    2 回复  |  直到 14 年前
        1
  •  3
  •   Roly    14 年前

    我认为您需要的是类似于在C#4.0中添加的ExpandoObject以及动态类型

    http://msdn.microsoft.com/en-us/magazine/ff796227.aspx

    它在内部使用字典,因此您可以动态添加/删除成员。第一次尝试访问以下属性时:

    obj.NewProperty = newValue
    

    ExpandoObject将自动将其添加到其内部字典中。

    希望这有帮助。

        2
  •  4
  •   JaredPar    14 年前