33

基本的に、以下のシナリオで配列の代わりに汎用リストを使用することの違いまたは利点を知りたい

class Employee
{
    private string _empName;

    public string EmpName
    {
       get{ return _empName; }
       set{ _empName = value; }
    }
}

1. Employee[] emp 
2. List<Employee> emp

長所と短所、どちらを優先するか誰か教えてください。

4

7 に答える 7

21

大きな違いの 1 つは、List<Employee>展開 (Add を呼び出すことができます) または縮小 (Remove を呼び出すことができます) できるのに対し、Employee[] はサイズが固定されていることです。したがって、Employee[]必要に応じて使用しない限り、作業が難しくなります。

于 2010-03-12T06:21:29.063 に答える
16

最大の違いは、配列は一度作成すると長くも短くもできないことです。ただし、リスト インスタンスには、要素を追加または削除することができます。他にも相違点があります (使用可能なメソッドのセットが異なるなど) が、追加/削除が大きな違いです。

リストの柔軟性は素晴らしく、コードが通常行っている他のほとんどのことのコストに比べてパフォーマンスのペナルティが非常に小さいため、配列を使用する本当に正当な理由がない限り、私はリストが好きです。

多くの興味深い技術的な詳細に飛び込みたい場合は、List vs. Array の質問をより深く掘り下げたこの StackOverflow スレッドをチェックしてください。

于 2010-03-12T06:23:01.573 に答える
7

一般的なリストを使用すると、Add/ Removeetc を安価に (少なくとも、遠端で) 実行できます。配列のサイズ変更 (追加/削除) は、よりコストがかかります。明らかな欠点は、リストには予備の容量があるため、おそらく数バイトが無駄になることです.ただし、ほとんどの場合、心配する価値はありません.

通常、データのサイズが決して変わらないことがわかっている場合を除き、リストを優先します。

API に関しては、LINQ ではそれらから選択できるものがほとんどないためです (つまり、余分なメソッドList<T>は LINQ によって大部分が複製されるため、配列はそれらを無料で取得します)。

別の利点は、リストを使用するとセッターを公開する必要がないことです。

private readonly List<Foo> items = new List<Foo>();
public List<Foo> Items { get { return items; } }

さまざまなバグを排除nullし、データを制御し続けることができます (特にIList<>、内容を変更するときに検査/検証をサポートする別の実装を使用する場合)。

于 2010-03-12T06:22:49.043 に答える
2

配列の作成時に配列のサイズを知る必要がありますが、作成後にサイズを変更することはできません。

そのため、作成時に配列に動的メモリ割り当てを使用します。(これは、コンパイル時にサイズを知る必要がある C++ 配列に使用される静的メモリ割り当てとは異なります。)

リストは、作成後に動的に拡張することができ、それ.Add()を行う機能を備えています。

-MSDN より

  1. Generics Vs Array Lists-SO一般的な比較。
  2. Generic List vs Arrays-SOなぜジェネリック リストは配列よりも遅いのですか?

どちらを優先しますか?List<T>.

于 2010-03-12T06:22:35.040 に答える
2

パブリック インターフェイスでコレクションを公開する場合、.NET Framework のガイドラインでは、T[] ではなくリストを使用することをお勧めします。(実際には、BindingList< T >)

内部的には、固定された既知のサイズのコレクションがある場合、配列の方が適切な場合があります。配列のサイズ変更は、List の末尾に要素を追加する場合に比べてコストがかかります。

于 2010-03-12T06:23:21.713 に答える
1

要素配列の数がわかっている場合は、適切な選択です。そうでない場合は、リストを使用してください。内部的List<T>に T の配列を使用するため、実際には思ったより似ています。

于 2010-03-12T06:22:12.257 に答える
1

List を使用すると、配列のサイズを事前に知る必要はありません。実装のニーズに基づいて、新しい従業員を動的に追加できます。

于 2010-03-12T06:22:31.850 に答える