【发布时间】:2016-08-05 13:26:48
【问题描述】:
标题可能写得不好,因为我真的不知道如何描述我的问题。 我的问题如下所述。 我有两个课程:
class BaseModel {
public string Name {get; set;}
}
class ChildModel : BaseModel {
public string ChildName {get; set;}
}
以及我保留上述类实例的第三类:
class OverallModel {
public IEnumerable<BaseModel> Models {get; set;}
}
现在我有两种方法:
public MappedBaseModel MapModel(BaseModel source){
var result = new MappedBaseModel();
// do magic for basemodel
}
public MappedBaseModel MapModel(ChildModel source){
var result = new MappedChildModel(); // MappedChildModel is a child of MappedBaseModel
// do magic for childmodel
}
现在当我像这样迭代 Models 时:
var list = new List<MappedBaseModel>();
foreach(var model in overallModel.Models){
list.Add(MapModel(model));
}
我很困惑,因为代码只调用MapModel(BaseModel),从不调用MapModel(ChildModel)。我做了一个解决方法来检查模型是否属于 ChildModel 类型:
foreach ...
if(model is ChildModel)
list.Add(MapModel(model as ChildModel)); // thats just ugly..
else
list.Add(MapModel(model));
我的问题是它看起来很糟糕。我不想检查模型的类型只是为了调用其他重载方法。 你能帮我让它更优雅吗? 我知道我可能没有提供足够的信息。请,如果您需要了解更多信息,请询问,我会尝试更深入地解释它。 另外,对不起我的英语! 祝你有美好的一天。
【问题讨论】:
-
或者使用
dynamic关键字list.Add(MapModel((dynamic)model)); -
什么是
MappedBaseModel?你在哪里定义的?
标签: c# .net inheritance overloading