Niezliczone foreach, zrób coś innego dla ostatniego elementu

mamIEnumerable<T>. Chcę zrobić jedną rzecz dla każdego elementu kolekcji, z wyjątkiem ostatniego elementu, do którego chcę zrobić coś innego. Jak mogę to dokładnie zakodować? W pseudokodzie

foreach (var item in collection)
{
    if ( final )
    {
        g(item)
    }
    else
    {
        f(item)
    }
}

Więc jeśli moje niezliczone byłyEnumerable.Range(1,4) Zrobiłbym f (1) f (2) f (3) g (4). NB. Jeśli mój IEnumerable ma długość 1, chcę g (1).

My IEnumerable zdarza się być trochę gównianymCount() tak drogie jak zapętlenie całej rzeczy.

questionAnswers(5)

yourAnswerToTheQuestion