如何通过向继承的类添加属性来初始化对象

时间:2015-10-12 21:08:53

标签: c# linq inheritance

有没有办法通过使用Linq在C#中的声明中使用继承的对象来轻松声明对象的另一个对象的扩展?以下示例类似于我想要发生的事情。我试图避免重写超类的所有属性。

示例:

public class Thing {
    public int Property {get; set;}
}

public class AnotherThing : Thing {
    public string AnotherProperty {get;set;}
}

public class Main {
    public List<AnotherThing> GetAnotherThings() =>
        GetListOfThings().Select(t => new AnotherThing(t) 
            { AnotherProperty = "Hello" }
        ).ToList();

    public List<Thing> GetListOfThings() {...}
}

2 个答案:

答案 0 :(得分:0)

您应该在代码中的某处设置这些属性;在您的linq查询或构造函数中 作为选项{ "people":[ {"name":"Jim","group":1, "independentAttribute": "A"}, {"name":"Dwight","group":2, "independentAttribute": "B"}, {"name":"Stanley","group":3, "independentAttribute": "C"} ], "extraAttributes":[ {"attribute1": 1,"attribute2": 2,"attribute3":3} ] } 可以这样:

AnotherThing

答案 1 :(得分:0)

您需要在AnotherThing上编写一个构造函数,该构造函数需要Thing并根据该函数设置新对象。我没有捷径可走。

public AnotherThing (Thing thing)
{
    this.Property = value.Property;
    // i would be careful to either make this a deep copy,
       //or have a DeepClone() method on Thing
}

如果您可以从该构造函数中挖掘私有字段,那么在Thing上创建一个返回Memento object的方法可能是个好主意。我建议不要在Thing中使用返回AnotherThing的方法。

编辑:

您是否尝试创建Thing以创建AnotherThing,从Thing调用AnotherThing构造函数是否更符合您的需求? :public AnotherThing (int foo) : base(foo){}