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层,序列化程序包含来自派生类的属性,而不仅仅是基类。有效负载太大,我试图减少发送回客户端的数据量。