Как дополнить объект анонимного типа в C # - PullRequest
5 голосов
/ 26 октября 2010

Мне часто нужно дополнить объект, например, свойством.До сих пор (устал от этого;) и это тоже некрасиво) Я сделал это так:

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 ]

4 голосов
/ 26 октября 2010

Нет, нет поддержки добавления новых свойств к существующему анонимному типу. Выражение анонимного типа можно использовать только для создания нового анонимного типа с указанными свойствами. Две лучшие альтернативы для добавления новых свойств - те, которые перечислены в вопросе.

3 голосов
/ 27 октября 2010

Я думаю, что вы ищете что-то вроде ExpandoObject, который был добавлен в C # 4.0 вместе с динамическим типом

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

Внутренне он использует словарь, поэтому вы можете добавлять / удалять участников динамически. При первой попытке получить доступ к свойству, как:

obj.NewProperty = newValue

ExpandoObject автоматически добавит это в свой внутренний словарь.

Надеюсь, это поможет.

...