More context is really required to answer the question properly:
In a public API, you should try to use abstract collection types, so that you can change the internal implementation later if you need to.
- If the collection should not be changed by the outside world, use
IEnumerable
.
- If the collection will be changed by the outside world, use
ICollection
.
- If indexed access is required, use
IList
.
In a private implementation, it's not as important to use the abstract types:
- If you need indexed access and know the final size, use
T[]
or List
.
- If you need indexed access and don't know the final size, use
List
.
- If you plan to access elements in a LIFO pattern, use
Stack
.
- If you plan to access elements in a FIFO pattern, use
Queue
.
- If you need to access elements at the beginning and end of the list, but not in the middle, use
LinkedList
.
- If you don't want duplicates, use
HashSet
.
In .NET 4.0 you have a few more choices, but those are the basics.