What is the best way to convert Action to Func<

2019-06-14 22:37发布

I have two functions in my class with this signatures,

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

How can I pass the same delegate in the second method to the first one? Creating method with Delegate argument is not a way, because I am loosing some exception informations
Thanks a lot!

2条回答
我想做一个坏孩纸
2楼-- · 2019-06-14 23:03

you are asking literally to pass something that doesn't supply a result to a function that requires it.
This is nonsensical.

You can easily convert any function of Form Action<T> to Func<T,TResult> if you are willing to supply some result value (either implicitly or explicitly)

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

or

Func<T,TResult> MakeFixed<T,TResult>(Action<T> action, TResult result)
{
    return t =>  { action(t); return result; };
}
查看更多
【Aperson】
3楼-- · 2019-06-14 23:07

Wrap it in a delegate of type Func<T, TResult> with a dummy return value, e.g.

public static void Execute(Action<T> remoteCall)
{
    Execute(t => { remoteCall(t); return true; });
}
查看更多
登录 后发表回答