我经常需要使用属性来扩充对象。直到现在(厌倦了它;)它也很丑陋)我这样做了:
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
};
我想这可以通过一些反思来完成,但我想有一种更快的方法可以使某些东西等同于第一种繁琐的方法。
谢谢,Lasse
答案 0 :(得分:4)
不支持将新属性附加到现有匿名类型。匿名类型表达式只能用于创建具有指定属性的全新匿名类型。附加新属性的两个最佳替代方案是问题中列出的方法。
答案 1 :(得分:3)
我认为你要找的东西就像是在C#4.0中添加的ExpandoObject以及动态类型
http://msdn.microsoft.com/en-us/magazine/ff796227.aspx
在内部,它使用字典,因此您可以动态添加/删除成员。您第一次尝试访问以下属性时:
obj.NewProperty = newValue
ExpandoObject会自动将其添加到其内部字典中。
希望这有帮助。