What is the best way to convert Action<T> to Func<T,Tres>?

喜欢而已 提交于 2019-12-18 07:29:35

问题


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!


回答1:


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; });
}



回答2:


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; };
}


来源:https://stackoverflow.com/questions/943941/what-is-the-best-way-to-convert-actiont-to-funct-tres

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!