C# 4.0 返回类型为基类型c时返回派生类型#
我有一个基本抽象类和一个派生类C# 4.0 返回类型为基类型c时返回派生类型#,c#-4.0,generics,interface,abstract-class,derived-class,C# 4.0,Generics,Interface,Abstract Class,Derived Class,我有一个基本抽象类和一个派生类 public class DerivedData1 : BaseData { public override List<Images> Photos { get { return new List<Images>(); } set {} } } public class DerivedData2 : BaseData
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 abstract class BaseData: IListingData
{
private int? _photos;
public string DataKey { get; set; }
public abstract List<Images> Photos { get; set; }
}
公共抽象类BaseData:IListingData
{
私人int?U照片;
公共字符串数据键{get;set;}
公开摘要列表照片{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 {}
}
}
公共类DerivedData1:BaseData
{
公共覆盖列表照片
{
得到
{return new List();}set{}
}
}
公共类DerivedData2:BaseData
{
公共覆盖列表照片
{
得到
{return new List();}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.
}
公共列表筛选器列表(谓词Handler谓词)
{
//从数据库中检索并基于某些谓词,它将创建DerivedData1或DerivedData2的列表
Return new List();//这就是错误所在。
}
我无法返回派生类型。我尝试了强制转换,得到了以下相同的编译错误。无法将表达式类型“System.Collections.Generic.List我缺少什么?如果我在您的位置,我会使用
列表
,并在迭代时将对象
转换为任何需要的对象(例如)。您的问题是List
和List
被视为不相关(这是预期的行为,即使不舒服) 在示例代码中,如果函数返回类型为ListingData列表,则不能返回DerivedData1的新列表。
原因是这两种列表类型之间没有层次关系。
您可以做的是:
公共列表筛选器列表(谓词Handler谓词)
{
var list=新列表();
添加(新的DerivedData1());
添加(新的DerivedData2());
退货清单;
}
阅读以下内容: