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.
问题在于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)
| 归档时间: |
|
| 查看次数: |
4591 次 |
| 最近记录: |