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

我有以下代码:

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对象),但它返回AB属性( 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 ,这意味着只需返回列表就可以了。