Оба эти алгоритма являются совершенно приемлемыми алгоритмами для обработки первого элемента по-разному, и на самом деле нет другого способа сделать это.Если этот шаблон повторяется много раз, вы можете скрыть его за перегрузкой ForEach ():
public static void ForEach<T>(this IEnumerable<T> elements, Action<T> firstElementAction, Action<T> standardAction)
{
var firstItem = true;
foreach(T element in elements)
{
if(firstItem)
{
firstItem = false;
firstElementAction(element)
}
else
standardAction(element)
}
}
...
//usage
yyy.ForEach(t=>(other code when first item), t=>(normal processing code));
Linq делает его немного чище:
PerformActionOnFirstElement(yyy.FirstOrDefault());
yyy.Skip(1).ForEach(x=>(normal processing code));