Interestingly, no one seems to be looking for a specialized List<T>
method (which by definition should have an optimal implementation), and there is one called GetRange which according to the documentation
Creates a shallow copy of a range of elements in the source List<T>.
So creating a shallow copy of the whole source list would be something like this
var shallowClone = originalList.GetRange(0, originalList.Count);
P.S. Of course the difference in performance from the most concise
var shallowClone = originalList.ToList();
and not so concise
var shallowClone = new List<MyLongListItemType>(originalList);
will be negligible.
So I would personally prefer ToList
version, and at the same time will remember to not call ToList
in my code without a need (which I've seen in many places) because of the copy behavior of that method.