Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 4.0 返回类型为基类型c时返回派生类型#_C# 4.0_Generics_Interface_Abstract Class_Derived Class - Fatal编程技术网

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”转换为返回类型“System.Collections.Generic.List

我还尝试将服务函数FilterListings()的返回类型更改为接口IListingData,但仍然遇到强制转换错误

我搜索了其他的Stackoverflow帖子。它回答了从基类中返回派生类型的问题。但我认为这是另一种情况

总之,我的服务类函数有一个返回类型Animal(),从函数内部我想返回Dog()


我缺少什么?

如果我在您的位置,我会使用
列表
,并在迭代时将
对象
转换为任何需要的对象(例如)。您的问题是
List
List
被视为不相关(这是预期的行为,即使不舒服)

在示例代码中,如果函数返回类型为ListingData列表,则不能返回DerivedData1的新列表。 原因是这两种列表类型之间没有层次关系。 您可以做的是:

公共列表筛选器列表(谓词Handler谓词)
{
var list=新列表();
添加(新的DerivedData1());
添加(新的DerivedData2());
退货清单;
}
阅读以下内容: