Самый общий метод, который я могу придумать, будет выглядеть примерно так:
Action<T1> Combine<T1, T2>(Func<T1, T2> func, Action<T2> action)
{
return x => action(func(x));
}
Использование:
Func<Foo, object> func = x => x;
Action<object> action = Console.WriteLine;
Action<Foo> result = Combine(func, action);
result(new Foo());