我有一个Base抽象类和一个派生类
基础抽象类
public abstract class BaseData: IListingData
{
private int? _photos;
public string DataKey { get; set; }
public abstract List<Images> Photos { get; set; }
}
派生类
public class DerivedData1 : BaseData
{
public override List<Images> Photos
{
get
{ return new List<Images>(); } set {}
}
}
public class DerivedData2 : BaseData
{
public override List<Images> Photos
{
get
{ return new List<Images>(); } set {}
}
}
我有服务功能:
public List<ListingData> FilterListings(PredicateHandler predicates)
{
//Retrieved from database and based on certain predicates, it will create List of DerivedData1 or DerivedData2
Return new List<DerivedData1>(); //This is where the ERROR is.
}
我无法返回派生类型。我尝试了转换,我得到以下相同的编译错误。 无法转换表达式类型&#39; System.Collections.Generic.List&lt; DerivedData1&GT;&#39;返回类型&#39; System.Collections.Generic.List&lt; ListingData&GT;&#39;
我也尝试将服务函数 FilterListings()的返回类型更改为接口 IListingData ,但我仍然遇到了转换错误。
我在其他Stackoverflow帖子上搜索过。这回答了从Base类中返回派生类型的问题。但我认为这是一个不同的场景。
底线,我的服务类函数有一个返回类型 Animal(),并且从函数内部我想要返回 Dog()
我错过了什么?
答案 0 :(得分:0)
在您的示例代码中,您无法返回DerivedData1的新List,其中函数返回类型是ListData的List。 原因是两种列表类型之间没有层次关系。 你能做的是:
public List<ListingData> FilterListings(PredicateHandler predicates)
{
var list = new List<BaseData>();
var list.Add(new DerivedData1());
var list.Add(new DerivedData2());
return list;
}
答案 1 :(得分:-1)
如果我在你的位置,我会使用List<object>
,并在迭代时(例如)将object
转换为所需的内容。您的问题是List<Base>
和List<DerivedFromBase>
被视为无关(即使不舒服,也是预期的行为)。