Каков наилучший способ преобразования Action <T> в Func <T, Tres>?

У меня есть две функции в моем классе с этими сигнатурами,

public static TResult Execute<TResult>(Func<T, TResult> remoteCall);
public static void Execute(Action<T> remoteCall)

Как передать один и тот же делегат во втором методе на первый? Создание метода с аргументом Delegate не является способом, потому что я теряю информацию об исключении
Большое спасибо!

Ответы

Ответ 1

Оберните его в делегат типа Func<T, TResult> с возвращаемым значением фиктивного типа, например.

public static void Execute(Action<T> remoteCall)
{
    Execute(t => { remoteCall(t); return true; });
}

Ответ 2

вы просите буквально передать то, что не дает результата функции, которая этого требует.
Это бессмысленно.

Вы можете легко преобразовать любую функцию формы Action<T> в Func<T,TResult>, если вы готовы указать какое-либо значение результата (неявно или явно)

Func<T,TResult> MakeDefault<T,TResult>(Action<T> action)
{
    return t =>  { action(t); return default(TResult);}; 
}

или

Func<T,TResult> MakeFixed<T,TResult>(Action<T> action, TResult result)
{
    return t =>  { action(t); return result; };
}