Вполне возможно. Смотрите:
static IEnumerable<TResult> Map<TIn, TResult>(this IEnumerable<TIn> seq, Func<TIn, TResult> mapper){
foreach(TIn item in seq) yield return mapper(item);
}
enum Parity { Even, Odd }
static void Test(){
List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6 };
Func<int, Parity> parity = (num) => num % 2 == 0 ? Parity.Even : Parity.Odd ;
foreach(var parity in numbers.Map(parity))
Console.Write(parity.ToString() + ", ");
}
Это выведет на экран
"Odd, Even, Odd, Even, Odd, Even, ".
Чем вам не функциональный подход? И LINQ здесь нет (разве что самодельный).