редактировать для обслуживания входов, не включенных в список, теперь обрабатывает IEnumerable<T>
и проверки , если это IList<T>
; в противном случае он буферизует его через ToList()
, что помогает гарантировать, что мы читаем данные только один раз (вместо .Count()
и .Skip()
, которые могут читать данные несколько раз).
Поскольку это список, я был бы склонен написать метод расширения, который использует его в полной мере:
public static IEnumerable<T> TakeLast<T>(
this IEnumerable<T> source, int count)
{
IList<T> list = (source as IList<T>) ?? source.ToList();
count = Math.Min(count, list.Count);
for (int i = list.Count - count; i < list.Count; i++)
{
yield return list[i];
}
}