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

Las*_*olt 5 c# linq anonymous-types

我经常需要使用属性来扩充对象.直到现在(厌倦了它;)它也很丑陋)我这样做了:

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
                            };
Run Code Online (Sandbox Code Playgroud)

有一个聪明的方法来做到这一点?我以前做的是这样的:

var objectsWithMyProperty = from o in someListOfObjects
                            select new
                            {
                                OldObject = o,           /* I access all of the old properties from here */    
                                SomeNewProperty = value
                            };
Run Code Online (Sandbox Code Playgroud)

我想这可以用一些反思来完成,但我想有一种更快的方法可以使某些东西等同于第一种繁琐的方法.

谢谢,Lasse

Rol*_*oly 3

我认为您正在寻找类似于 C# 4.0 中添加的 ExpandoObject 以及动态类型的东西

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

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

obj.NewProperty = newValue
Run Code Online (Sandbox Code Playgroud)

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

希望这可以帮助。