我的课程中有两个带有此签名的函数,
public static TResult Execute<TResult>(Func<T, TResult> remoteCall);
public static void Execute(Action<T> remoteCall)
如何将第二种方法中的同一委托传递给第一种方法?使用Delegate参数创建方法不是一种方法,因为我正在丢失一些异常信息。非常感谢!
答案 0 :(得分:34)
将其包含在具有虚拟返回值的Func<T, TResult>
类型的委托中,例如
public static void Execute(Action<T> remoteCall)
{
Execute(t => { remoteCall(t); return true; });
}
答案 1 :(得分:8)
你要求字面意思是将一些不能提供结果的东西传递给需要它的函数 这是荒谬的。
如果您愿意提供某些结果值(隐式或显式),您可以轻松地将表单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; };
}