c# array vs generic list [duplicate]

2020-02-08 23:32发布

i basically want to know the differences or advantages in using a generic list instead of an array in the below mentioned scenario

class Employee
{
    private string _empName;

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

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

can anyone please tell me the advantages or disadvantages and which one to prefer?

7条回答
聊天终结者
2楼-- · 2020-02-09 00:01

One big difference is that List<Employee> can be expanded (you can call Add on it) or contracted (you can call Remove on it) whereas Employee[] is fixed in size. Thus, Employee[] is tougher to work with unless the need calls for it.

查看更多
唯我独甜
3楼-- · 2020-02-09 00:03

If you are exposing a collection in a public interface the .NET Framework Guidelines advise to use a List rather than T[]. (In fact, a BindingList< T >)

Internally, an array can be more appropriate if you have a collection which is a fixed, known size. Resizing an array is expensive compared to adding an element to the end of a List.

查看更多
兄弟一词,经得起流年.
4楼-- · 2020-02-09 00:04

With the generic list, you can Add / Remove etc cheaply (at least, at the far end). Resizing an array (to add/remove) is more expensive. The obvious downside is that a list has spare capacity so maybe wastes a few bytes - not worth worrying about in most cases, though (and you can trim it).

Generally, prefer lists unless you know your data never changes size.

API-wise, since LINQ there is little to choose between them (i.e. the extra methods on List<T> are largely duplicated by LINQ, so arrays get them for free).

Another advantage is that with a list you don't need to expose a setter:

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

eliminating a range of null bugs, and allowing you to keep control over the data (especially if you use a different IList<> implementation that supports inspection / validation when changing the contents).

查看更多
放荡不羁爱自由
5楼-- · 2020-02-09 00:05

If you know the number of elements array is a good choice. If not use the list. Internally List<T> uses an array of T so the are actually more like than you may think.

查看更多
来,给爷笑一个
6楼-- · 2020-02-09 00:05

With a List, you don't need to know the size of the array beforehand. You can dynamically add new Employee's based on the needs of your implementation.

查看更多
forever°为你锁心
7楼-- · 2020-02-09 00:10

You need to know the size of an array at the time that it is created, but you cannot change its size after it has been created.

So, it uses dynamic memory allocation for the array at creation time. (This differs from static memory allocation as used for C++ arrays, where the size must be known at compile time.)

A list can grow dynamically AFTER it has been created, and it has the .Add() function to do that.

-from MSDN

  1. Generics Vs Array Lists-SO General comparision.
  2. Generic List vs Arrays-SO Why is generic list slower than array?

Which one to prefer? List<T>.

查看更多
登录 后发表回答