有没有办法通过使用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() {...}
}
答案 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){}