将派生类的列表转换为仍返回派生类对象的基类列表
我有以下代码:
public class BaseClass { public string A { get; set; } } public class DerivedClass : BaseClass { public string B { get; set; } } List _derivedClass = new List() { new DerivedClass() { A = "test1", B = "test2" } }; List _baseClass = _derivedClass.Cast.ToList();
代码编译没有任何错误,但是,我希望_baseClass
只包含属性A
(类型为BaseClass
对象),但它返回A
和B
属性( DerivedClass
类型的DerivedClass
)。 我错过了什么以及将派生类的List转换为其基类列表的正确方法是什么?
谢谢。
我错过了什么以及将派生类的List转换为其基类列表的正确方法是什么?
该列表仍包含DerivedClass
实例,但它们被用作BaseClass
引用。
但是,此API的任何使用者都不会知道这一点,因此他们会将此视为BaseClass
元素。
这很常见,通常是正确的方法。 如果您需要实际将实例转换为BaseClass
实例(这可能不是必需的),您需要从DerivedClass
成员实际创建新的BaseClass
实例,即:
List _baseClass = _derivedClass.Select(dc => new BaseClass {A = dc.A}).ToList();
这通常没有必要,你目前的方法可能很好。 Liskov替换原则指出任何DerivedClass
在任何情况下都可以作为BaseClass
,这意味着只需返回列表就可以了。