开发者

How to augment anonymous type object in C#

开发者 https://www.devze.com 2023-01-21 21:13 出处:网络
I often need to augment a object with a property for instance. Until now (tired of it ;) and it\'s ugly too) I have done it this way:

I often need to augment a object with a property for instance. Until now (tired of it ;) and it's ugly too) I have done it this way:

var someListOfObjects = ...;

var objec开发者_如何学JAVAtsWithMyProperty = 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
                            };

Is there a clever way to do this? What I have done previously is something like this:

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

I guess this could be done with some reflection, but I imagine there is a faster approach which makes something equivalent to the first cumbersome approach.

Thanks, Lasse


No there is no support for appending new properties to an existing anonymous type. An anonymous type expression can only be used to create a brand new anonymous type with the specified properties. The two best alternatives for appending new properties are the ones listed in the question.


I think what you are looking for is something like the ExpandoObject that was added in C# 4.0 along with the dynamic type

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

Internally it uses a dictionary so you can add/remove members dynamically. The first time you try to access a property like:

obj.NewProperty = newValue

the ExpandoObject will automatically add this to its internal dictionary.

Hope this helps.

0

精彩评论

暂无评论...
验证码 换一张
取 消