.NETは、パフォーマンスがほぼ同じである一般的なリストコンテナーを提供します(配列のパフォーマンスとリストのパフォーマンスの質問を参照)。ただし、初期化はかなり異なります。
配列は、デフォルト値で非常に簡単に初期化でき、定義により、すでに特定のサイズになっています。
string[] Ar = new string[10];
これにより、ランダムなアイテムを安全に割り当てることができます。
Ar[5]="hello";
リストでは物事はよりトリッキーです。同じ初期化を行う2つの方法を見ることができます。どちらもエレガントとは言えません。
List<string> L = new List<string>(10);
for (int i=0;i<10;i++) L.Add(null);
または
string[] Ar = new string[10];
List<string> L = new List<string>(Ar);
よりクリーンな方法は何でしょうか?
編集:これまでの答えは、容量を参照していますが、これはリストに事前入力する以外の方法です。たとえば、容量が10で作成されたばかりのリストでは、L[2]="somevalue"
編集2:人々が私がなぜこのようにリストを使用したいのか不思議に思っています、それはそれらが意図された使用方法ではないからです。私には2つの理由があります。
リストは「次世代」の配列であり、ほとんどペナルティなしで柔軟性を追加すると、説得力をもって主張することができます。したがって、デフォルトでそれらを使用する必要があります。初期化が簡単ではないかもしれないと指摘しています。
私が現在書いているのは、より大きなフレームワークの一部としてデフォルトの機能を提供する基本クラスです。私が提供するデフォルトの機能では、リストのサイズは事前にわかっているため、配列を使用することもできます。ただし、どの基本クラスにも動的に拡張する機会を提供したいので、リストを選びます。
List
はの代替品ではありませんArray
。彼らは明確に別の問題を解決します。あなたは、固定サイズが必要な場合は、したいですArray
。を使用する場合List
、それは間違っています。