有没有简洁的方法来装饰匿名类型?

时间:2011-07-25 15:41:47

标签: c# c#-3.0 anonymous-types

假设我们有一个匿名类型的实例:

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 个答案:

答案 0 :(得分:3)

这听起来像你需要具有继承模式的定义良好的类型。

您的上述说法是d是b的扩展名:或

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

class d : b
{
    Jiffle = "custard"
}

答案 1 :(得分:0)

组合物

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

d.B.Length;

答案 2 :(得分:0)

dlev's comment拉出答案,以便我接受:

  

我认为没有一种简单的方法,而且它看起来确实像   滥用匿名类型。如果你需要那么多领域那么多   类型之间的共性,只需自己声明类型。如果你是   希望动态添加这些字段,ExpandoObject可以   帮助