Есть ли краткий способ украсить анонимный тип? - PullRequest
3 голосов
/ 25 июля 2011

Предположим, у нас есть экземпляр анонимного типа:

var b = new { 
    Length = 5
    , Width = 6 
    // 40 more properties
};

и мы хотим создать экземпляр другого анонимного типа, который имеет все те же члены, что и первый тип, с теми же значениями, что и первый экземпляр, но с одним дополнительным членом:

var d = new {
    b.Length
    , b.Width
    // the same 40 more properties, with values from b
    , Jiffle = "custard"
};

Приятно, что компилятор будет автоматически определять то, что мы хотим назвать членами типа d, только из этого инициализатора. Но можно ли как-нибудь избежать явной ссылки на все 42 члена, которые мы хотим скопировать?

Ответы [ 3 ]

3 голосов
/ 25 июля 2011

Похоже, вам нужны четко определенные типы с шаблоном наследования.

То, что вы сказали выше, это то, что d является расширением b или:

class b
{
    Length = 5
    , Width = 6 
    // 40 more properties
}

class d : b
{
    Jiffle = "custard"
}
0 голосов
/ 26 июля 2013

Ввод комментария dlev в ответ, чтобы я мог принять его:

Я не думаю, что есть простой способ, и это, конечно, похоже на злоупотребление анонимными типами. Если вам нужно столько полей и столько общность между типами, просто объявите типы самостоятельно. Если вы если вы хотите добавить эти поля динамически, ExpandoObject может помощь.

0 голосов
/ 25 июля 2011

Состав?

var d = new { B = b, Jiffle = "custard" }

d.B.Length;
...