Вы можете попробовать:
collection.first(x=>
{
//...
}).rest(x=>
{
//...
}).run();
first / rest будет выглядеть следующим образом:
FirstPart<T> first<T>(this IEnumerable<T> c, Action<T> a)
{
return new FirstPart<T>(c, a);
}
FirstRest rest<T>(this FirstPart<T> fp, Action<T> a)
{
return new FirstRest(fp.Collection, fp.Action, a);
}
Вам необходимо определить классифицированные FirstPart и FirstRest.FirstRest потребуется такой метод запуска (свойства Collection, FirstAction и RestAction являются):
void run()
{
bool first = true;
foreach (var x in Collection)
{
if (first) {
FirstAction(x);
first = false;
}
else {
RestAction(x);
}
}
}