【问题标题】:Is there a concise way to decorate an anonymous type?有没有一种简洁的方式来装饰匿名类型?
【发布时间】:2013-07-26 17:23:26
【问题描述】:

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

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 个成员?

【问题讨论】:

  • 我不认为有一个简单的方法,而且这似乎是对匿名类型的滥用。如果您需要那么多字段和类型之间的那么多共性,只需自己声明类型即可。如果您希望动态添加这些字段,ExpandoObject (msdn.microsoft.com/en-us/library/…)可以提供帮助。
  • 虽然我同意@dlev,但解决方法是简单地这样做:var d = new { b, Jiffle = "xyz" };
  • @dlev 我已将您的评论提取到 an answer,但如果您想自己发布并获得 25 名代表,请随意这样做:)

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


【解决方案1】:

听起来您需要具有继承模式的明确定义的类型。

您上面所说的是 d 是 b 的扩展或:

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

class d : b
{
    Jiffle = "custard"
}

【讨论】:

    【解决方案2】:

    作曲?

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

    【讨论】:

    • 对不起@Daniel Hilgarth,在我发布之前没有看到你的评论。
    • 没问题。我觉得它不值得回答,所以我只是将它作为评论发布。
    • @Daniel Hilgarth。哎呀,这让我感觉好多了。 :-)
    • 哈哈,对不起。我只需要发布那个;-)
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-05
      • 1970-01-01
      • 2013-03-27
      • 2017-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-12
      相关资源
      最近更新 更多