関数 - C#配列対総称リスト




c# 関数 リスト (5)

この質問には既に回答があります:

私は基本的に、以下のシナリオで配列の代わりにジェネリックリストを使用する際の違いや利点を知りたい

class Employee
{
    private string _empName;

    public string EmpName
    {
       get{ return _empName; }
       set{ _empName = value; }
    }
}
1. Employee[] emp 
2. List<Employee> emp

誰も私に長所や短所を教えてください、どちらが好きですか?

https://code.i-harness.com


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

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

リストは作成された後に動的に拡張することができ、それを行うための.Add()関数があります。

-MSDNから

  1. Generics Vs Arrayリスト - SO一般的な比較。
  2. 汎用リストと配列-SOなぜ汎用リストは配列よりも遅いのですか?

どれを好むの? List<T>


あなたが要素の数を知っていれば配列は良い選択です。 リストを使用しない場合。 内部的にList<T>List<T>の配列を使用しているので、実際はあなたが考えるよりもよく似ています。


リストを使うと、あらかじめ配列のサイズを知る必要はありません。 実装のニーズに基づいて新しい従業員を動的に追加することができます。


一般的なリストでは、あなたは(少なくとも遠端で)安くAdd / Removeすることができます。 配列のサイズ変更(追加/削除)は、より高価です。 明らかな欠点は、リストに余分な容量があるため、おそらく数バイトの無駄になることです。しかし、ほとんどの場合、それを調整することはできません。

一般に、あなたのデータが決してサイズを変えないことを知らない限り、リストを好む。

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

もう1つの利点は、リストでセッターを公開する必要がないことです。

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

(特に内容を変更するときに検査/検証をサポートする別のIList<>実装を使用する場合)、データを制御することができます。


最大の違いは、アレイが作成されるとアレイを長くまたは短くすることができないことです。 ただし、リストインスタンスは、要素を追加または削除することができます。 他のdiffもあります(例えば、利用可能なメソッドのセットが異なります)が、add / removeは大きな違いです。

リストの柔軟性は素晴らしく、perfペナルティはあなたのコードが通常やっている他の多くのもののコストに比べて非常に小さいので、Arrayを使う本当に良い理由がない限りListが好きです。

興味深い技術的な詳細を知りたければ、リスト対配列の質問を詳しく解説したこのスレッドを調べてください。





generic-list