In most cases,
List<T> is more useful.
LinkedList<T> will have less cost when adding/removing items in the middle of the list, whereas
List<T> can only cheaply add/remove at the end of the list.
LinkedList<T> is only at it’s most efficient if you are accessing sequential data (either forwards or backwards) – random access is relatively expensive since it must walk the chain each time (hence why it doesn’t have an indexer). However, because a
List<T> is essentially just an array (with a wrapper) random access is fine.
List<T> also offers a lot of support methods –
ToArray, etc; however, these are also available for
LinkedList<T> with .NET 3.5/C# 3.0 via extension methods – so that is less of a factor.