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?
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.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.
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:
eliminating a range of
null
bugs, and allowing you to keep control over the data (especially if you use a differentIList<>
implementation that supports inspection / validation when changing the contents).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.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.
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
Which one to prefer?
List<T>
.