私はジョンからのこの返信を見ました 不明なタイプでジェネリックオブジェクトを初期化 :
単一のコレクションに複数の無関係なタイプの値を含める場合は、
List<object>
を使用する必要があります
ArrayList
とList<>
を比較するのではなく、ArrayList
とList<object>
を比較します。どちらもobject
型の要素を公開するためです。この場合、どちらを使用するメリットは何ですか?
編集:どちらのクラスもアイテムとしてobject
を公開しているため、ここでは型の安全性は問題になりません。 object
から目的の型にキャストする必要があります。タイプセーフティ以外に興味があります。
編集:答えを提供してくれたMarc GravellとSeanに感謝します。申し訳ありませんが、回答として1つしか選択できないため、両方に賛成票を投じます。
Cast<object>()
/List<object>
を挿入しない限り、OfType<object>
ではLINQ拡張メソッドを直接使用できますが、ArrayList
では使用できません(おかげでIEnumerable<object>
vs IEnumerable
)。タイプセーフティなどが必要ない場合でも、これはかなりの価値があります。
速度はほぼ同じになります。構造体はまだボックス化されていますなど-それで、それらを区別するために他に多くはありません。私がArrayList
を「おっと、だれかが再びレガシーコードを書いている...」と見る傾向があることを除いて、;-p
List<object>
を使用する大きな利点の1つは、最近のほとんどのコードが汎用のクラス/インターフェースを使用するように記述されていることです。最近、ほとんどの人がIList
ではなくIList<object>
をとるメソッドを書くと思います。 ArrayList
はIList<object>
を実装していないため、これらのシナリオでは配列リストを使用できません。
私は、非ジェネリッククラス/インターフェースをレガシーコードと考え、可能な限りそれらを回避する傾向があります。
この場合、ArrayList
とList<Object>
その後、速度の違いに気付くことはありません。これらのそれぞれで使用できる実際のメソッドにはいくつかの違いがある可能性があります(特に.NET 3.5とカウント拡張メソッド)。
はい、タイプセーフであることに加えて、ジェネリックコレクションの方が実際には高速です。
MSDNから( http://msdn.Microsoft.com/en-us/library/system.collections.generic.aspx )
System.Collections.Generic名前空間には、ジェネリックコレクションを定義するインターフェイスとクラスが含まれます。これにより、ユーザーは、型の安全性とパフォーマンスが向上する厳密に型指定されたコレクションを作成できます。非ジェネリックの強く型付けされたコレクション。
ベンチマークを行うと、最も効果的なものがわかります。その差は非常に小さいと私は思います。