Мне нужен был метод, чтобы дать мне все, кроме последнего элемента в последовательности. Это моя текущая реализация:
public static IEnumerable<T> SkipLast<T>(this IEnumerable<T> source)
{
using (IEnumerator<T> iterator = source.GetEnumerator())
{
if(iterator.MoveNext())
while(true)
{
var current = iterator.Current;
if(!iterator.MoveNext())
yield break;
yield return current;
}
}
}
Мне это нужно для того, чтобы что-то сделать со всеми элементами, кроме последнего. В моем случае у меня есть последовательность объектов с различными свойствами. Затем я упорядочиваю их по дате, а затем мне нужно настроить все из них, кроме самого последнего элемента (который будет последним после заказа).
Дело в том, что я пока не слишком увлекаюсь этими счетчиками и прочим, и мне действительно не у кого здесь спросить: p Мне интересно, является ли это хорошей реализацией, или я где-то сделал небольшую или большую ошибку. Или, может быть, этот подход к проблеме странный и т. д.
Я предполагаю, что более общей реализацией мог бы быть метод AllExceptMaxBy
. Так как это как-то так. В MoreLinq есть метод MaxBy
и MinBy
, и мой метод должен выполнять то же самое, но возвращает каждый элемент, кроме максимального или минимального.