-1

"ObjectArray" という名前の配列リストがあり、パフォーマンスを向上させ、キャストの問題を取り除きます。汎用リストを使用することを考えました。次の配列リストをリストに変換するにはどうすればよいですか? 私は知っToList()ていますが、このシナリオではどうすればよいですか

public class ObjectArray : ArrayList
  {}



 ObjectArray col = ObjectArray.Deserialize(xml, Type.type);


Testobject tmo;

tmo= (Testobject)col[i];
4

2 に答える 2

2

List<T>から継承するのではなく、代わりに継承する必要がありますCollection<T>。MSDN ドキュメントごと:

System.Collections.Generic.List は、継承ではなくパフォーマンスのために設計されたジェネリック コレクションであるため、仮想メンバーは含まれません。

Collection クラスは、その構築された型の 1 つのインスタンスを作成することにより、すぐに使用できます。コレクションに含めるオブジェクトのタイプを指定するだけです。さらに、構築された任意の型から独自のコレクション型を派生させたり、Collection クラス自体からジェネリック コレクション型を派生させることができます。

以下から継承しCollectionます。クラス内で、(必要に応じて) 基本的なコレクションの動作をオーバーライドしたり、独自の実装を追加したりできます。

public class ObjectArray : Collection<T>

http://msdn.microsoft.com/en-us/library/ms132397(v=vs.80).aspxを参照してください。

于 2013-03-05T09:24:48.287 に答える
1

ちょっと立ち止まってください。1 つのクラスに 2 つのことをさせようとしています。また、コンパイル時の問題を実行時に移動します。強力な型を逆シリアル化し、すべてを 1 つにまとめるのではなく、厳密に型指定されたリストに格納することをお勧めします。

すなわち

 ViewModel[] viewModels= Serializer.DeserialiseViewModels(fromSomething);
 DataModel[] dataModels= Serializer.DeserialiseDataModels(fromSomething);

いずれにせよ、型を逆シリアル化し、それらをリストに追加することに関心があります。ここで車輪を再発明する必要はないので、新しいコレクション クラスを気にしないでください。

SO オブジェクトの配列をデシリアライズしたと仮定しましょう。

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();
于 2013-03-05T09:45:09.547 に答える