我有一个名为“ObjectArray”的数组列表,为了提高性能并摆脱强制转换问题,我想使用通用列表,如何将以下 arralist 转换为列表?我知道ToList()
会做,但在这种情况下该怎么做
public class ObjectArray : ArrayList
{}
ObjectArray col = ObjectArray.Deserialize(xml, Type.type);
Testobject tmo;
tmo= (Testobject)col[i];
您不应该继承自List<T>
,Collection<T>
而是。根据 MSDN 文档:
System.Collections.Generic.List 是为性能而非继承而设计的通用集合,因此不包含任何虚拟成员。
Collection 类可以通过创建其构造类型之一的实例来立即使用;您所要做的就是指定要包含在集合中的对象的类型。此外,您可以从任何构造类型派生自己的集合类型,或从 Collection 类本身派生泛型集合类型。
继承自Collection
如下。在您的类中,您可以覆盖(如果需要)基本集合行为和/或添加您自己的实现。
public class ObjectArray : Collection<T>
请参阅http://msdn.microsoft.com/en-us/library/ms132397(v=vs.80).aspx
停一秒;你试图让一个班级做两件事。您还将编译时问题转移到运行时。我建议你反序列化强类型并将它们存储在强类型列表中,而不是把所有东西都放在一个列表中。
IE
ViewModel[] viewModels= Serializer.DeserialiseViewModels(fromSomething);
DataModel[] dataModels= Serializer.DeserialiseDataModels(fromSomething);
在任何情况下,您都关心反序列化类型并将它们添加到列表中。所以不要为一个新的集合类而烦恼,因为你不需要在这里重新发明轮子。
所以让我们假设你已经反序列化了一个对象数组,即
object[] loaded = ObjectArraySerializer.Deserialise(fromSomething);
现在您要获取 T1 和 T2 类型的所有项目
List<T1> itemsT1 = loaded.OfType<T1>().ToList()
List<T2> itemsT2 = loaded.OfType<T2>().ToList()
现在假设
where T1: TBase, where T2: TBase
你可以做
List<TBase> TBaseItems = itemsT1.Cast<TBase>().Concat(itemsT2.Cast<TBase>()).ToList();
或者你可以直接做到这一点;
List<TBase> tbaseItems= loaded.OfType<TBase>().ToList();