C#将对象转换为基类列表

Nic*_*sen 5 c# casting base-class

我有以下类结构:

public class Fruit { }
public class Apple : Fruit { }
Run Code Online (Sandbox Code Playgroud)

然后我使用.net框架中的一个方法,该方法从作为对象返回的类中获取属性值.所以,

// values will be of type List<Apple>
object values = someObject.GetValue()
Run Code Online (Sandbox Code Playgroud)

我现在有了List类型的这个值对象,我想将它转换为类型为Fruit的List.我试过以下但是没有用.

List<Fruit> fruits = values as List<Fruit>;
Run Code Online (Sandbox Code Playgroud)

任何人都知道如何将对象转换为其基类的List?

更新:在转换时我不知道值对象是List类型我知道它应该是一个继承自Fruit的类型的List.

Jus*_*ner 5

问题在于List<Apple>并且List<Fruit>不是共变体.您首先必须转换为List<Apple>然后使用LINQ的Cast方法将元素转换为Fruit:

List<Fruit> fruits = values is List<Apple> ? 
    (values as List<Apple>).Cast<Fruit>().ToList() :
    new List<Fruit>();
Run Code Online (Sandbox Code Playgroud)

如果您不提前知道类型并且不需要修改列表(并且您使用的是C#4.0),则可以尝试:

IEnumerable<Fruit> fruits = values as IEnumerable<Fruit>;
Run Code Online (Sandbox Code Playgroud)

或者,我想,如果你需要一个List:

List<Fruit> fruits = (values as IEnumerable<Fruit>).ToList();
Run Code Online (Sandbox Code Playgroud)