Мне очень нравится Last() и будет использовать его все время для List<T> s. Но поскольку он определен для IEnumerable<T>, я предполагаю, что он перечисляет сначала перечисление - это должно быть O (n), а не O (1) для прямой индексации последнего элемента a List<T>.
Знают ли стандартные методы расширения (Linq) об этом?
STL в С++ знает об этом в силу целого "дерева наследования" для итераторов и еще чего-то.