Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.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# 将派生类列表强制转换为仍返回派生类对象的基类列表_C#_Derived Class_Base Class - Fatal编程技术网

C# 将派生类列表强制转换为仍返回派生类对象的基类列表

C# 将派生类列表强制转换为仍返回派生类对象的基类列表,c#,derived-class,base-class,C#,Derived Class,Base Class,我有以下代码: public class BaseClass { public string A { get; set; } } public class DerivedClass : BaseClass { public string B { get; set; } } List<DerivedClass> _derivedClass = new List<DerivedClass>()

我有以下代码:

public class BaseClass
{
    public string A { get; set; }
}

public class DerivedClass : BaseClass
{
    public string B { get; set; }
}


List<DerivedClass> _derivedClass = new List<DerivedClass>() 
                                       { 
                                           new DerivedClass() 
                                             { A = "test1",
                                               B = "test2"
                                             }
                                       }; 

List<BaseClass> _baseClass = _derivedClass.Cast<BaseClass>.ToList();
公共类基类
{
公共字符串A{get;set;}
}
公共类派生类:基类
{
公共字符串B{get;set;}
}
列表_derivedClass=新列表()
{ 
新的DerivedClass()
{A=“test1”,
B=“test2”
}
}; 
List _baseClass=_derivedClass.Cast.ToList();
代码编译时没有任何错误,但是我希望
\u baseClass
只包含属性
A
(类型为
baseClass
)的对象,但它同时返回
A
B
属性(类型为
DerivedClass
的对象)。我缺少什么?将派生类列表转换为基类列表的正确方法是什么

多谢各位

我缺少什么?将派生类列表转换为基类列表的正确方法是什么

该列表仍然包含
派生类
的实例,但它们被用作
基类
的引用

但是,此API的任何使用者都不会知道这一点,因此他们会将其视为
BaseClass
元素

这是常见的,通常是正确的方法。如果需要将实例实际转换为
BaseClass
实例(这可能不是必需的),则需要从
DerivedClass
成员实际创建新的
BaseClass
实例,即:

List<BaseClass> _baseClass = _derivedClass.Select(dc => new BaseClass {A = dc.A}).ToList();
List_baseClass=\u derivedClass.Select(dc=>newbaseclass{A=dc.A}).ToList();

这通常是不必要的,而您当前的方法可能很好。声明任何
DerivedClass
在任何情况下都应该作为
BaseClass
使用,这意味着只要像您那样返回列表就可以了。

为什么您关心它是否真的是幕后的
DerivedClass
?您是如何访问这些属性的?我觉得很好…大家好,请看我对下面@ReedCopsey的回复。谢谢。谢谢你的详细回复。这是有道理的,你的解决方案奏效了。长话短说,我正在使用MVC4WebAPI构建一个API层,序列化程序包含来自派生类的属性,而不仅仅是基类。有效负载太大,我试图减少发送回客户端的数据量。